SlideShare a Scribd company logo
Spark DataFrames Introduction
道玄坂LT祭り第2回(統計、機械学習、データ抽出)
Yu Ishikawa
1
発表のゴール
• Hadoop MapReduce を書くのめんどいわー
• Python ユーザや R ユーザが,ビッグデータを
気軽に扱うにはどうすりゃいいの?
2
それ Spark DataFrame でできるよ
Apache Spark 知ってるよね?
3
Speed
4
Hadoop MapReduce に比べて 10x ~ 100x 早い
Ease of Use
5
PageRank も数行で実装できる
Generality
6
機械学習ライブラリなども標準で利用できる
Runs Everywhere
7
Hadoop, Mesos などと豊富な連携
2015 年の重点開発方針
• Data Science
– 使いやすい high-level APIs の提供
• scikit-learn のような一貫性をもった APIs
• Platform Interfaces
– 標準対応以外のデータソースへのアクセスやアルゴリズ
ムをより簡単に利用できるインターフェースの提供
• spark-packages というパッケージ管理ツールのようなもので 3rd
party ライブラリを利用できるようにする
8
DataFrame APIs の紹介
「Spark なにそれ?」って人も多いと
思うので表面的な話をします
9
Agenda
• 導入
• DataFrame APIs とは?
• DataFrame APIs の紹介
• Demo
• まとめ
10
Agenda
• 導入
• DataFrame APIs とは?
• DataFrame APIs の紹介
• Demo
• まとめ
11
DataFrame APIs とは
• データサイエンスでよく使われる処理を Domain-specific functions
にしたもの
– Project
– Filter
– Aggregation
– Join
– UDFs
• Python, Java, Scala and R (via SparkR) から利用できる
• Spark 1.3 でリリースされる機能
12
ビッグデータを Spark 上で
より簡潔でより高速に処理できる機能
Spark ならより簡単に MR を実装できる
13
DataFrame APIs で Spark をより簡潔に操作
14
DataFrame の最適化機構によってより高速に処理ができる
15
Agenda
• 導入
• DataFrame APIs とは?
• DataFrame APIs の紹介
• Demo
• まとめ
16
主な DataFrame APIs
• Creation
• Check Schema
• Project
• Filter
• Aggregation
• Join
• UDFs
17
Creation
• DataFrame API で扱うデータの読み込み
• JSON, Hive, Purque などが利用できる
18
// Create a SQLContext (sc is an existing SparkContext)
val context = new org.apache.spark.sql.SQLContext(sc)
// Create a DataFrame for Github events
var path = "file:///tmp/github-archive-data/*.json.gz"
val event = context.load(path, "json").as('event)
// Create a DataFrame for Github users
path = "file:///tmp/github-archive-data/github-users.json"
val user = context.load(path, "json").as('user)
Check Schema
• printSchema でスキーマを確認できる
19
event.printSchema
root
|-- actor: struct (nullable = true)
| |-- avatar_url: string (nullable = true)
| |-- gravatar_id: string (nullable = true)
| |-- id: long (nullable = true)
| |-- login: string (nullable = true)
| |-- url: string (nullable = true)
|-- created_at: string (nullable = true)
|-- id: string (nullable = true)
….
Project
• select() で取り出したいカラムを選択
– $”parent.child” の記法でネストされたカラムも選択できる
• select(‘key as ‘alias) のように as でエイリアスを作れる
20
// Select a column
event("public”)
event.select(‘public as ‘PUBLIC)
// Select multile columns with aliases
event.select('public as 'PUBLIC, 'id as 'ID)
// Select nested columns with aliases
event.select($"payload.size" as 'size, $"actor.id" as 'actor_id)
Filter
• filter() は SQL の WHERE のような役割
• 複数の条件を指定する場合は,ひとつの filter() に入れるこ
とも,ふたつの filter() のチェーンに分けることもできる
21
// Filter by a condition
user.filter("name is not null”)
// Filter by a comblination of two conditions
event.filter("public = true and type = 'ForkEvent'”)
event.filter("public = true").filter("type = 'ForkEvent'”)
Aggregation
• count() は単純にレコード数を数える
• groupBy() は SQL の GROUP BY の働き
• agg() を組み合わせることで威力をさらに発揮
22
// Count the number of records
user.count
// Group by ‘type column and then count
event.groupBy("type").count()
// Aggregate by ‘id column
user.groupBy('id).agg('id, count("*"), sum('id))
Join
• まず as() で各 DataFrame のエイリアスを登録
• join() と where() で結合と結合条件を指定
• 結合した結果のカラムを取り出すには,登録したエ
イリアスを利用すれば良い
23
// Register their aliases
val user = user.as('user)
val pr = event.filter('type === "PullRequestEvent").as('pr)
// Join the two data sets
val join = pr.join(user).where($"pr.payload.pull_request.user.id" === $"user.id")
join.select($"pr.type", $"user.name", $"pr.created_at”)
UDF: User Defined Function
• udf() で独自関数を定義して,DataFrame の中で利用できる
• 例:文字列 “2015-01-01T00:00:00Z” から
– “2015-01-01” を抽出する関数を定義
– “00:00:00” を抽出する関数を定義
24
// Define User Defined Functions
val toDate = udf((createdAt: String) => createdAt.substring(0, 10))
val toTime = udf((createdAt: String) => createdAt.substring(11, 19))
// Use the UDFs in select()
event.select(toDate('created_at) as 'date, toTime('created_at) as 'time)
Agenda
• 導入
• DataFrame APIs とは?
• DataFrame APIs の紹介
• Demo
• まとめ
25
With Machine Learning (1)
• Github のコミットメッセージに対して,word2vec を適応
26
val toIter = udf((x: ArrayBuffer[String]) => x.mkString(delimiter))
val messages = event.
select($"payload.commits.message" as 'messages).filter("messages is not null").
select(toIter($"messages")).
flatMap(row => row.toSeq.map(_.toString).apply(0).split(delimiter))
val message = messages.map(_.replaceAll("""(n|)""", "").
replaceAll("""s+""", " ").split(" ").map(_.replaceAll("""(,|.)$""", "")).toSeq).
filter(_.size > 0)
// create a model
val model = new Word2Vec().fit(message)
With Machine Learning (2)
• 構築したモデルで類似語を出力
27
> model.findSynonyms("bug", 10).foreach(println)
(issue,0.6874246597290039)
(typo,0.663004457950592)
(bugs,0.599325954914093)
(errors,0.5887047052383423)
(problem,0.5665265321731567)
(fixes,0.5617778897285461)
(spelling,0.5353047847747803)
(crash,0.5330312848091125)
(Fixed,0.5128884315490723)
(small,0.5113803744316101)
Agenda
• 導入
• DataFrame APIs とは?
• DataFrame APIs の紹介
• Demo
• まとめ
28
まとめ
• DataFrame APIs は,ビッグデータを Spark 上
でより簡潔より高速に処理できる機能
• groupBy, agg, count, join などのデータ操作で
よく使う関数が準備されている
– Pandas を知っている人は,あんな感じをイメージ
してくれるとよい
• UDF で独自の関数も定義できる
• 機械学習ライブラリとの組み合わせられる
29
DataFrame の課題
• Apache Spark の機械学習ライブラリ mllib に
つなぎこむためのデータ変換が面倒くさい
• よりシームレスに連携できるような仕組みが
必要だと思われる
30
DataFrame Introduction
• spark-dataframe-introduction
• http://goo.gl/Futoi0
31

More Related Content

What's hot (20)

PDF
20160121 データサイエンティスト協会 木曜セミナー #5
Koichiro Sasaki
 
PDF
広告配信現場で使うSpark機械学習
x1 ichi
 
PDF
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Treasure Data, Inc.
 
PDF
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
Koichiro Sasaki
 
PDF
最近のストリーム処理事情振り返り
Sotaro Kimura
 
PPTX
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Recruit Technologies
 
PDF
ゼロから始めるSparkSQL徹底活用!
Nagato Kasaki
 
PDF
Presto As A Service - Treasure DataでのPresto運用事例
Taro L. Saito
 
PPTX
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
Holden Karau
 
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
 
PPTX
Hive on Spark の設計指針を読んでみた
Recruit Technologies
 
PDF
hscj2019_ishizaki_public
Kazuaki Ishizaki
 
PDF
GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた
Tetsuo Yamabe
 
PDF
20150513 legobease
Takeshi Yamamuro
 
PPTX
A Benchmark Test on Presto, Spark Sql and Hive on Tez
Gw Liu
 
PDF
Re:dash Use Cases at iPROS
Jumpei Yokota
 
PDF
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Hadoop / Spark Conference Japan
 
PPTX
Spark Structured StreamingでKafkaクラスタのデータをお手軽活用
Sotaro Kimura
 
PDF
Apache Sparkやってみたところ
Tatsunori Nishikori
 
PPT
Blueprintsについて
Tetsuro Nagae
 
20160121 データサイエンティスト協会 木曜セミナー #5
Koichiro Sasaki
 
広告配信現場で使うSpark機械学習
x1 ichi
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Treasure Data, Inc.
 
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
Koichiro Sasaki
 
最近のストリーム処理事情振り返り
Sotaro Kimura
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Recruit Technologies
 
ゼロから始めるSparkSQL徹底活用!
Nagato Kasaki
 
Presto As A Service - Treasure DataでのPresto運用事例
Taro L. Saito
 
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
Holden Karau
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
 
Hive on Spark の設計指針を読んでみた
Recruit Technologies
 
hscj2019_ishizaki_public
Kazuaki Ishizaki
 
GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた
Tetsuo Yamabe
 
20150513 legobease
Takeshi Yamamuro
 
A Benchmark Test on Presto, Spark Sql and Hive on Tez
Gw Liu
 
Re:dash Use Cases at iPROS
Jumpei Yokota
 
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Hadoop / Spark Conference Japan
 
Spark Structured StreamingでKafkaクラスタのデータをお手軽活用
Sotaro Kimura
 
Apache Sparkやってみたところ
Tatsunori Nishikori
 
Blueprintsについて
Tetsuro Nagae
 

Viewers also liked (20)

PPTX
2014 09-12 lambda-architecture-at-indix
Yu Ishikawa
 
PDF
[IPW]FriLoc - Your Friends Locations
Vlad Petre
 
PDF
New Jersey CyberKnife: Words from Our Patients
New Jersey CyberKnife
 
PDF
Prostate Cancer Treatment Options
New Jersey CyberKnife
 
PPTX
「チーム開発実践入門」勉強会
Yu Ishikawa
 
PDF
BdasとSpark概要
Yu Ishikawa
 
PPTX
Amazon EMR Facebook Presto Meetup
stevemcpherson
 
PPTX
Introduction to Spark - DataFactZ
DataFactZ
 
PPTX
Intro to Spark with Zeppelin
Hortonworks
 
PDF
Spark 巨量資料處理基礎教學
NUTC, imac
 
PDF
Large-Scale Machine Learning with Apache Spark
DB Tsai
 
PDF
Apache Spark RDDs
Dean Chen
 
PDF
df: Dataframe on Spark
Alpine Data
 
PDF
Introduction to Apache Spark 2.0
Knoldus Inc.
 
PPTX
Apache Spark Model Deployment
Databricks
 
PDF
IoT時代におけるストリームデータ処理と急成長の Apache Flink
Takanori Suzuki
 
PDF
2016-06-15 Sparkの機械学習の開発と活用の動向
Yu Ishikawa
 
PDF
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...
Spark Summit
 
PDF
Fast Data Analytics with Spark and Python
Benjamin Bengfort
 
PDF
Python and Bigdata - An Introduction to Spark (PySpark)
hiteshnd
 
2014 09-12 lambda-architecture-at-indix
Yu Ishikawa
 
[IPW]FriLoc - Your Friends Locations
Vlad Petre
 
New Jersey CyberKnife: Words from Our Patients
New Jersey CyberKnife
 
Prostate Cancer Treatment Options
New Jersey CyberKnife
 
「チーム開発実践入門」勉強会
Yu Ishikawa
 
BdasとSpark概要
Yu Ishikawa
 
Amazon EMR Facebook Presto Meetup
stevemcpherson
 
Introduction to Spark - DataFactZ
DataFactZ
 
Intro to Spark with Zeppelin
Hortonworks
 
Spark 巨量資料處理基礎教學
NUTC, imac
 
Large-Scale Machine Learning with Apache Spark
DB Tsai
 
Apache Spark RDDs
Dean Chen
 
df: Dataframe on Spark
Alpine Data
 
Introduction to Apache Spark 2.0
Knoldus Inc.
 
Apache Spark Model Deployment
Databricks
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
Takanori Suzuki
 
2016-06-15 Sparkの機械学習の開発と活用の動向
Yu Ishikawa
 
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...
Spark Summit
 
Fast Data Analytics with Spark and Python
Benjamin Bengfort
 
Python and Bigdata - An Introduction to Spark (PySpark)
hiteshnd
 
Ad

Similar to 2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction (20)

PDF
Apache spark 2.3 and beyond
NTT DATA Technology & Innovation
 
PPTX
Spark Summit 2014 の報告と最近の取り組みについて
Recruit Technologies
 
PDF
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Kazuki Taniguchi
 
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
NTT DATA OSS Professional Services
 
PPTX
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
Holden Karau
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
NTT DATA Technology & Innovation
 
PPTX
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
NTT DATA Technology & Innovation
 
PPT
Quick Overview of Upcoming Spark 3.0 + α
Takeshi Yamamuro
 
PDF
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Takeshi Yamamuro
 
PDF
Spark Analytics - スケーラブルな分散処理
Tusyoshi Matsuzaki
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
PPTX
Pythonで入門するApache Spark at PyCon2016
Tatsuya Atsumi
 
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
PDF
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
YusukeKuramata
 
PDF
[Oracle big data jam session #1] Apache Spark ことはじめ
Kenichi Sonoda
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
NTT DATA Technology & Innovation
 
PPTX
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
PPTX
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
Cloudera Japan
 
PPTX
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
PDF
Big Data University Tokyo Meetup #6 (mlwith_spark) 配布資料
Atsushi Tsuchiya
 
Apache spark 2.3 and beyond
NTT DATA Technology & Innovation
 
Spark Summit 2014 の報告と最近の取り組みについて
Recruit Technologies
 
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Kazuki Taniguchi
 
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
NTT DATA OSS Professional Services
 
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
Holden Karau
 
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
NTT DATA Technology & Innovation
 
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
NTT DATA Technology & Innovation
 
Quick Overview of Upcoming Spark 3.0 + α
Takeshi Yamamuro
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Takeshi Yamamuro
 
Spark Analytics - スケーラブルな分散処理
Tusyoshi Matsuzaki
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
Pythonで入門するApache Spark at PyCon2016
Tatsuya Atsumi
 
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
YusukeKuramata
 
[Oracle big data jam session #1] Apache Spark ことはじめ
Kenichi Sonoda
 
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
NTT DATA Technology & Innovation
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
Cloudera Japan
 
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
Big Data University Tokyo Meetup #6 (mlwith_spark) 配布資料
Atsushi Tsuchiya
 
Ad

Recently uploaded (9)

PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 

2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction

  • 2. 発表のゴール • Hadoop MapReduce を書くのめんどいわー • Python ユーザや R ユーザが,ビッグデータを 気軽に扱うにはどうすりゃいいの? 2 それ Spark DataFrame でできるよ
  • 5. Ease of Use 5 PageRank も数行で実装できる
  • 7. Runs Everywhere 7 Hadoop, Mesos などと豊富な連携
  • 8. 2015 年の重点開発方針 • Data Science – 使いやすい high-level APIs の提供 • scikit-learn のような一貫性をもった APIs • Platform Interfaces – 標準対応以外のデータソースへのアクセスやアルゴリズ ムをより簡単に利用できるインターフェースの提供 • spark-packages というパッケージ管理ツールのようなもので 3rd party ライブラリを利用できるようにする 8
  • 9. DataFrame APIs の紹介 「Spark なにそれ?」って人も多いと 思うので表面的な話をします 9
  • 10. Agenda • 導入 • DataFrame APIs とは? • DataFrame APIs の紹介 • Demo • まとめ 10
  • 11. Agenda • 導入 • DataFrame APIs とは? • DataFrame APIs の紹介 • Demo • まとめ 11
  • 12. DataFrame APIs とは • データサイエンスでよく使われる処理を Domain-specific functions にしたもの – Project – Filter – Aggregation – Join – UDFs • Python, Java, Scala and R (via SparkR) から利用できる • Spark 1.3 でリリースされる機能 12 ビッグデータを Spark 上で より簡潔でより高速に処理できる機能
  • 13. Spark ならより簡単に MR を実装できる 13
  • 14. DataFrame APIs で Spark をより簡潔に操作 14
  • 16. Agenda • 導入 • DataFrame APIs とは? • DataFrame APIs の紹介 • Demo • まとめ 16
  • 17. 主な DataFrame APIs • Creation • Check Schema • Project • Filter • Aggregation • Join • UDFs 17
  • 18. Creation • DataFrame API で扱うデータの読み込み • JSON, Hive, Purque などが利用できる 18 // Create a SQLContext (sc is an existing SparkContext) val context = new org.apache.spark.sql.SQLContext(sc) // Create a DataFrame for Github events var path = "file:///tmp/github-archive-data/*.json.gz" val event = context.load(path, "json").as('event) // Create a DataFrame for Github users path = "file:///tmp/github-archive-data/github-users.json" val user = context.load(path, "json").as('user)
  • 19. Check Schema • printSchema でスキーマを確認できる 19 event.printSchema root |-- actor: struct (nullable = true) | |-- avatar_url: string (nullable = true) | |-- gravatar_id: string (nullable = true) | |-- id: long (nullable = true) | |-- login: string (nullable = true) | |-- url: string (nullable = true) |-- created_at: string (nullable = true) |-- id: string (nullable = true) ….
  • 20. Project • select() で取り出したいカラムを選択 – $”parent.child” の記法でネストされたカラムも選択できる • select(‘key as ‘alias) のように as でエイリアスを作れる 20 // Select a column event("public”) event.select(‘public as ‘PUBLIC) // Select multile columns with aliases event.select('public as 'PUBLIC, 'id as 'ID) // Select nested columns with aliases event.select($"payload.size" as 'size, $"actor.id" as 'actor_id)
  • 21. Filter • filter() は SQL の WHERE のような役割 • 複数の条件を指定する場合は,ひとつの filter() に入れるこ とも,ふたつの filter() のチェーンに分けることもできる 21 // Filter by a condition user.filter("name is not null”) // Filter by a comblination of two conditions event.filter("public = true and type = 'ForkEvent'”) event.filter("public = true").filter("type = 'ForkEvent'”)
  • 22. Aggregation • count() は単純にレコード数を数える • groupBy() は SQL の GROUP BY の働き • agg() を組み合わせることで威力をさらに発揮 22 // Count the number of records user.count // Group by ‘type column and then count event.groupBy("type").count() // Aggregate by ‘id column user.groupBy('id).agg('id, count("*"), sum('id))
  • 23. Join • まず as() で各 DataFrame のエイリアスを登録 • join() と where() で結合と結合条件を指定 • 結合した結果のカラムを取り出すには,登録したエ イリアスを利用すれば良い 23 // Register their aliases val user = user.as('user) val pr = event.filter('type === "PullRequestEvent").as('pr) // Join the two data sets val join = pr.join(user).where($"pr.payload.pull_request.user.id" === $"user.id") join.select($"pr.type", $"user.name", $"pr.created_at”)
  • 24. UDF: User Defined Function • udf() で独自関数を定義して,DataFrame の中で利用できる • 例:文字列 “2015-01-01T00:00:00Z” から – “2015-01-01” を抽出する関数を定義 – “00:00:00” を抽出する関数を定義 24 // Define User Defined Functions val toDate = udf((createdAt: String) => createdAt.substring(0, 10)) val toTime = udf((createdAt: String) => createdAt.substring(11, 19)) // Use the UDFs in select() event.select(toDate('created_at) as 'date, toTime('created_at) as 'time)
  • 25. Agenda • 導入 • DataFrame APIs とは? • DataFrame APIs の紹介 • Demo • まとめ 25
  • 26. With Machine Learning (1) • Github のコミットメッセージに対して,word2vec を適応 26 val toIter = udf((x: ArrayBuffer[String]) => x.mkString(delimiter)) val messages = event. select($"payload.commits.message" as 'messages).filter("messages is not null"). select(toIter($"messages")). flatMap(row => row.toSeq.map(_.toString).apply(0).split(delimiter)) val message = messages.map(_.replaceAll("""(n|)""", ""). replaceAll("""s+""", " ").split(" ").map(_.replaceAll("""(,|.)$""", "")).toSeq). filter(_.size > 0) // create a model val model = new Word2Vec().fit(message)
  • 27. With Machine Learning (2) • 構築したモデルで類似語を出力 27 > model.findSynonyms("bug", 10).foreach(println) (issue,0.6874246597290039) (typo,0.663004457950592) (bugs,0.599325954914093) (errors,0.5887047052383423) (problem,0.5665265321731567) (fixes,0.5617778897285461) (spelling,0.5353047847747803) (crash,0.5330312848091125) (Fixed,0.5128884315490723) (small,0.5113803744316101)
  • 28. Agenda • 導入 • DataFrame APIs とは? • DataFrame APIs の紹介 • Demo • まとめ 28
  • 29. まとめ • DataFrame APIs は,ビッグデータを Spark 上 でより簡潔より高速に処理できる機能 • groupBy, agg, count, join などのデータ操作で よく使う関数が準備されている – Pandas を知っている人は,あんな感じをイメージ してくれるとよい • UDF で独自の関数も定義できる • 機械学習ライブラリとの組み合わせられる 29
  • 30. DataFrame の課題 • Apache Spark の機械学習ライブラリ mllib に つなぎこむためのデータ変換が面倒くさい • よりシームレスに連携できるような仕組みが 必要だと思われる 30
  • 31. DataFrame Introduction • spark-dataframe-introduction • http://goo.gl/Futoi0 31