SlideShare a Scribd company logo
1 of 31
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

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

What's hot (20)

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

Viewers also liked

2014 09-12 lambda-architecture-at-indix
2014 09-12 lambda-architecture-at-indix2014 09-12 lambda-architecture-at-indix
2014 09-12 lambda-architecture-at-indixYu Ishikawa
 
[IPW]FriLoc - Your Friends Locations
[IPW]FriLoc - Your Friends Locations[IPW]FriLoc - Your Friends Locations
[IPW]FriLoc - Your Friends LocationsVlad Petre
 
New Jersey CyberKnife: Words from Our Patients
New Jersey CyberKnife: Words from Our PatientsNew Jersey CyberKnife: Words from Our Patients
New Jersey CyberKnife: Words from Our PatientsNew Jersey CyberKnife
 
「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会Yu Ishikawa
 
BdasとSpark概要
BdasとSpark概要BdasとSpark概要
BdasとSpark概要Yu Ishikawa
 
Amazon EMR Facebook Presto Meetup
Amazon EMR Facebook Presto MeetupAmazon EMR Facebook Presto Meetup
Amazon EMR Facebook Presto Meetupstevemcpherson
 
Introduction to Spark - DataFactZ
Introduction to Spark - DataFactZIntroduction to Spark - DataFactZ
Introduction to Spark - DataFactZDataFactZ
 
Intro to Spark with Zeppelin
Intro to Spark with ZeppelinIntro to Spark with Zeppelin
Intro to Spark with ZeppelinHortonworks
 
Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學NUTC, imac
 
Large-Scale Machine Learning with Apache Spark
Large-Scale Machine Learning with Apache SparkLarge-Scale Machine Learning with Apache Spark
Large-Scale Machine Learning with Apache SparkDB Tsai
 
Apache Spark RDDs
Apache Spark RDDsApache Spark RDDs
Apache Spark RDDsDean Chen
 
df: Dataframe on Spark
df: Dataframe on Sparkdf: Dataframe on Spark
df: Dataframe on SparkAlpine Data
 
Introduction to Apache Spark 2.0
Introduction to Apache Spark 2.0Introduction to Apache Spark 2.0
Introduction to Apache Spark 2.0Knoldus Inc.
 
Apache Spark Model Deployment
Apache Spark Model Deployment Apache Spark Model Deployment
Apache Spark Model Deployment Databricks
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkTakanori Suzuki
 
2016-06-15 Sparkの機械学習の開発と活用の動向
2016-06-15 Sparkの機械学習の開発と活用の動向2016-06-15 Sparkの機械学習の開発と活用の動向
2016-06-15 Sparkの機械学習の開発と活用の動向Yu Ishikawa
 
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...Spark Summit
 
Fast Data Analytics with Spark and Python
Fast Data Analytics with Spark and PythonFast Data Analytics with Spark and Python
Fast Data Analytics with Spark and PythonBenjamin Bengfort
 
Python and Bigdata - An Introduction to Spark (PySpark)
Python and Bigdata -  An Introduction to Spark (PySpark)Python and Bigdata -  An Introduction to Spark (PySpark)
Python and Bigdata - An Introduction to Spark (PySpark)hiteshnd
 

Viewers also liked (20)

2014 09-12 lambda-architecture-at-indix
2014 09-12 lambda-architecture-at-indix2014 09-12 lambda-architecture-at-indix
2014 09-12 lambda-architecture-at-indix
 
[IPW]FriLoc - Your Friends Locations
[IPW]FriLoc - Your Friends Locations[IPW]FriLoc - Your Friends Locations
[IPW]FriLoc - Your Friends Locations
 
New Jersey CyberKnife: Words from Our Patients
New Jersey CyberKnife: Words from Our PatientsNew Jersey CyberKnife: Words from Our Patients
New Jersey CyberKnife: Words from Our Patients
 
Prostate Cancer Treatment Options
Prostate Cancer Treatment OptionsProstate Cancer Treatment Options
Prostate Cancer Treatment Options
 
「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会
 
BdasとSpark概要
BdasとSpark概要BdasとSpark概要
BdasとSpark概要
 
Amazon EMR Facebook Presto Meetup
Amazon EMR Facebook Presto MeetupAmazon EMR Facebook Presto Meetup
Amazon EMR Facebook Presto Meetup
 
Introduction to Spark - DataFactZ
Introduction to Spark - DataFactZIntroduction to Spark - DataFactZ
Introduction to Spark - DataFactZ
 
Intro to Spark with Zeppelin
Intro to Spark with ZeppelinIntro to Spark with Zeppelin
Intro to Spark with Zeppelin
 
Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學
 
Large-Scale Machine Learning with Apache Spark
Large-Scale Machine Learning with Apache SparkLarge-Scale Machine Learning with Apache Spark
Large-Scale Machine Learning with Apache Spark
 
Apache Spark RDDs
Apache Spark RDDsApache Spark RDDs
Apache Spark RDDs
 
df: Dataframe on Spark
df: Dataframe on Sparkdf: Dataframe on Spark
df: Dataframe on Spark
 
Introduction to Apache Spark 2.0
Introduction to Apache Spark 2.0Introduction to Apache Spark 2.0
Introduction to Apache Spark 2.0
 
Apache Spark Model Deployment
Apache Spark Model Deployment Apache Spark Model Deployment
Apache Spark Model Deployment
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
2016-06-15 Sparkの機械学習の開発と活用の動向
2016-06-15 Sparkの機械学習の開発と活用の動向2016-06-15 Sparkの機械学習の開発と活用の動向
2016-06-15 Sparkの機械学習の開発と活用の動向
 
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...
Practical Large Scale Experiences with Spark 2.0 Machine Learning: Spark Summ...
 
Fast Data Analytics with Spark and Python
Fast Data Analytics with Spark and PythonFast Data Analytics with Spark and Python
Fast Data Analytics with Spark and Python
 
Python and Bigdata - An Introduction to Spark (PySpark)
Python and Bigdata -  An Introduction to Spark (PySpark)Python and Bigdata -  An Introduction to Spark (PySpark)
Python and Bigdata - An Introduction to Spark (PySpark)
 

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

[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥Insight Technology, Inc.
 
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lakede:code 2017
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤Takumi Sakamoto
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDaiyu Hatakeyama
 
Spark Summit 2014 の報告と最近の取り組みについて
Spark Summit 2014 の報告と最近の取り組みについてSpark Summit 2014 の報告と最近の取り組みについて
Spark Summit 2014 の報告と最近の取り組みについてRecruit Technologies
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編DevTakas
 
20181120 HowtoFlow
20181120 HowtoFlow20181120 HowtoFlow
20181120 HowtoFlowTomoyuki Obi
 
オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門  #oreilly0724オライリーセミナー Hive入門  #oreilly0724
オライリーセミナー Hive入門 #oreilly0724Cloudera Japan
 
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現インフラジスティックス・ジャパン株式会社
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介bigt23
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)NTT DATA Technology & Innovation
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンKazuyuki Miyake
 

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

Azure Datalake 大全
Azure Datalake 大全Azure Datalake 大全
Azure Datalake 大全
 
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
 
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data Platform
 
Spark Summit 2014 の報告と最近の取り組みについて
Spark Summit 2014 の報告と最近の取り組みについてSpark Summit 2014 の報告と最近の取り組みについて
Spark Summit 2014 の報告と最近の取り組みについて
 
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushiGoogle Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushi
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編
 
20181120 HowtoFlow
20181120 HowtoFlow20181120 HowtoFlow
20181120 HowtoFlow
 
オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門  #oreilly0724オライリーセミナー Hive入門  #oreilly0724
オライリーセミナー Hive入門 #oreilly0724
 
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
Azure DataLake 大全
Azure DataLake 大全Azure DataLake 大全
Azure DataLake 大全
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
 

Recently uploaded

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 

Recently uploaded (12)

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 

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