SlideShare a Scribd company logo
1 of 46
Download to read offline
Apache Arrow Powered by Rabbit 2.2.2
Apache Arrow
須藤功平
株式会社クリアコード
RubyData Tokyo Meetup
2018-11-17
Apache Arrow Powered by Rabbit 2.2.2
Apache Arrow
各種言語で使える
インメモリー
データ処理
プラットフォーム
Apache Arrow Powered by Rabbit 2.2.2
提供するもの
高速なデータフォーマット✓
高速なデータ処理ロジック
各プロダクトで個別に実装するより
一緒にいいものを実装して共有しよう!
✓
✓
効率的なデータ交換処理✓
...✓
Apache Arrow Powered by Rabbit 2.2.2
利用例
高速なデータ処理ロジック
Apache Arrow提供
高速なデータフォーマット
効率的なデータ交換処理
分散処理ツール
コーディネーター
ワーカー
データ収集
ツール
データ前処理
ツール
クエリー
実行エンジン
可視化
ツール
ワーカー
ワーカー
Apache Arrow Powered by Rabbit 2.2.2
大事にすること1
効率的なデータ交換
Apache Arrow Powered by Rabbit 2.2.2
前提
イマドキの
データ処理システムは
単一コンポーネントで
完結しない
Apache Arrow Powered by Rabbit 2.2.2
複数コンポーネント
メリット:
コンポーネント毎に適した言語を使える✓
✓
デメリット:
データ交換が増える(オーバーヘッド)✓
✓
Apache Arrow Powered by Rabbit 2.2.2
データ交換コスト
シリアライズコスト✓
転送コスト✓
デシリアライズコスト✓
Apache Arrow Powered by Rabbit 2.2.2
コスト例:JSON
シリアライズコスト
[1] -#to_json-> "[1]"
転送コスト
-output#write->
-input#read->
デシリアライズコスト
"[1]" -JSON.parse-> [1]
Apache Arrow Powered by Rabbit 2.2.2
コスト比較例:JSON
n = 1000000
numbers = n.times.to_a
JSON.dump(numbers, json_file)
JSON.load(json_file)
Apache Arrow Powered by Rabbit 2.2.2
コスト比較例:Apache Arrow
n = 1000000
numbers = Arrow::Int32Array.new(numbers)
arrow_table = Arrow::Table.new("number" => numbers)
arrow_table.save(arrow_path)
Arrow::Table.load(arrow_path)
Apache Arrow Powered by Rabbit 2.2.2
コスト比較例
実行時間 JSON比
JSON 0.099秒 1
Apache Arrow 0.002秒 1/50
Apache Arrow Powered by Rabbit 2.2.2
データ交換コストの影響
コンポーネント数と正の相関
コンポーネントが増えると無視できない✓
✓
データ量と正の相関
データが多くなると無視できない✓
✓
Apache Arrow Powered by Rabbit 2.2.2
まとめ
イマドキのデータ処理システムで
大量データを処理するなら
データ交換コストを無視できない
✓
Apache Arrowはデータ交換コストが低い
仕組みは後述✓
✓
Apache Arrow Powered by Rabbit 2.2.2
大事にすること2
各種言語で使えること
Apache Arrow Powered by Rabbit 2.2.2
各種言語
Java, C++, Python, C, Ruby,
Lua, JavaScript, Go, Rust,
MATLAB, R, C#
Apache Arrow Powered by Rabbit 2.2.2
イマドキのデータ処理システム
コンポーネント毎に適した言語を採用
採用言語でApache Arrowを使えないと
システムでApache Arrowを使えない
✓
✓
Apache Arrowに対応していれば
コンポーネントでその言語を採用しやすい
Railsが活きるコンポーネントでRubyを使うとか✓
✓
Apache Arrow Powered by Rabbit 2.2.2
実現方法
ネイティブ実装
Java, C++, JavaScript, Go, Rust, C#✓
メリット:扱いやすい(インストールが楽とか)✓
✓
C++実装のバインディング
Python, C, Ruby, Lua, MATLAB, R✓
メリット:高速・実装の共有✓
✓
Apache Arrow Powered by Rabbit 2.2.2
まとめ
Apache Arrowは各種言語で使える
Rubyと他の言語でのデータ交換が楽になる✓
✓
Ruby実装はC++実装のバインディング
速い・豊富な機能(C++実装はすごく進んでいる)✓
✓
Apache Arrow Powered by Rabbit 2.2.2
大事にすること3
速いこと
Apache Arrow Powered by Rabbit 2.2.2
速さが必要な理由
大量のデータを
処理するためポイント:大量データ前提の設計
Apache Arrow Powered by Rabbit 2.2.2
速いデータフォーマット
パースせずに使えるデータフォーマット
メモリー上で効率よく扱える並びでデータを配置✓
パースしなくてよいし、そのまま使っても速い✓
✓
既存のデータの並びと互換性あり
例:NumPyの数値配列と互換✓
互換性があるとゼロコピーで使える✓
✓
Apache Arrow Powered by Rabbit 2.2.2
速いデータ処理
SIMD・キャッシュメモリー・マルチコアで
高速化
データをアライン・局所化・リードオンリーに✓
✓
高速な式評価器
式:column1 + column2みたいなやつ
ifとかも使える
✓
Gandiva:式をJITコンパイルして実行✓
✓
Apache Arrow Powered by Rabbit 2.2.2
データ処理例:Ruby
n = 100000
ruby_table = n.times.collect do
{
"number1" => rand,
"number2" => rand,
}
end
ruby_table.collect do |record|
record["number1"] + record["number2"]
end
Apache Arrow Powered by Rabbit 2.2.2
データ処理例:Numo::NArray
n = 100000
numo_number1 = Numo::DFloat.new(n).rand
numo_number2 = Numo::DFloat.new(n).rand
numo_number1 + numo_number2
Apache Arrow Powered by Rabbit 2.2.2
データ処理例:Gandiva
n = 100000
arrow_number1 = Arrow::DoubleArray.new(n.times.collect {rand})
arrow_number2 = Arrow::DoubleArray.new(n.times.collect {rand})
arrow_table = Arrow::Table.new("number1" => arrow_number1,
"number2" => arrow_number2)
Apache Arrow Powered by Rabbit 2.2.2
データ処理例:Gandiva
# 次のリリースまでにいい感じに書けるようにする予定
schema = arrow_table.schema
expression =
Gandiva::Expression.new("add",
[schema[:number1], schema[:number2]],
Arrow::Field.new("sum", :double))
projector = Gandiva::Projector.new(schema, [expression])
arrow_table.each_record_batch do |record_batch|
projector.evaluate(record_batch)
end
Apache Arrow Powered by Rabbit 2.2.2
データ処理例
実行時間 Ruby比
Ruby 0.010247秒 1
Numo::NArray 0.000158秒 1/67
Gandiva 0.000459秒 1/25
Numo::NArrayがすごくがんばっている
Apache Arrow Powered by Rabbit 2.2.2
速いデータ交換
同一マシン上での交換
メモリーファイルシステム上に置いてmmap✓
Plasma:データ共有サーバーを動かしてIPC
Inter-Process Communication
✓
✓
別マシン上での交換
Arrow Flight:gRPCベースのRPCフレームワーク✓
✓
Apache Arrow Powered by Rabbit 2.2.2
GPUで速い
Plasma:GPU対応✓
RAPIDS:NVIDIAのGPUをデータサイエンスで
活用するためのプロジェクト
libgdf:Apache Arrowフォーマットのデータを
GPUで扱うデータフレームライブラリー
Rubyバインディングはまだない
✓
✓
Apache Arrow Powered by Rabbit 2.2.2
まとめ
Apache Arrowは速い
速いデータフォーマット✓
速いデータ処理(もっと速くなるはず)✓
速いデータ交換✓
✓
今後、GPUももっと活用していく✓
Apache Arrow Powered by Rabbit 2.2.2
Apache Arrowのこれから例
データフォーマットの
相互変換強化
Apache Arrow Powered by Rabbit 2.2.2
相互変換:Apache Parquet
# Apache Arrow→Apache Parquet
arrow_table.save("data.parquet")
# Apache Parquet→Apache Arrow
Arrow::Table.load("data.parquet")
Apache Arrow Powered by Rabbit 2.2.2
相互変換:Feather
# Apache Arrow→Feather
arrow_table.save("data.feather")
# Feather→Apache Arrow
Arrow::Table.load("data.feather")
Apache Arrow Powered by Rabbit 2.2.2
相互変換:Apache ORC
# Apache ORC→Apache Arrow
Arrow::Table.load("data.orc")
Apache Arrow Powered by Rabbit 2.2.2
相互変換:CSV
# Apache Arrow→CSV
arrow_table.save("data.csv")
# CSV→Apache Arrow
Arrow::Table.load("data.csv")
Apache Arrow Powered by Rabbit 2.2.2
CSV読み込み例
# 標準ライブラリー(Ruby実装)
CSV.foreach(path) {|row| row}
# 拡張ライブラリー
Ccsv.foreach(path) {|row| row}
# C++実装
Arrow::Table.load(path, use_threads: true)
Apache Arrow Powered by Rabbit 2.2.2
CSV読み込み時間
実行時間 csv比
csv 0.818315秒 1
ccsv 0.064988秒 1/13
Apache Arrow 0.009030秒 1/90
Apache Arrow Powered by Rabbit 2.2.2
相互変換:Rubyオブジェクト
Rubyバインディング限定
# Active Record→Apache Arrow
User.all.to_arrow
# Numo::NArray→Apache Arrow
narray.to_arrow
# NMatrix→Apache Arrow
matrix.to_arrow
Apache Arrow Powered by Rabbit 2.2.2
相互変換の今後
JSON→Apache Arrow✓
Apache Avro→Apache Arrow✓
Apache Arrow Powered by Rabbit 2.2.2
Apache Arrowのこれから(もっと)
RDBMS連携強化
PostgreSQL・MySQLでの実行結果を
Apache Arrowフォーマットで返す
✓
✓
テンソルサポート強化✓
...✓
Apache Arrow Powered by Rabbit 2.2.2
Rubyバインディングの今後
Plasma対応✓
GandivaバインディングのAPIをいい感じに✓
バインディングフレームワークの高速化✓
一緒に開発しようぜ!
Apache Arrow Powered by Rabbit 2.2.2
Apache ArrowとRubyまわりの今後
libgdfのRubyバインディング開発✓
gumath/xnd/ndtypesとの連携✓
一緒に開発しようぜ!
Apache Arrow Powered by Rabbit 2.2.2
おしらせ1
コード懇親会(今日の懇親会)✓
興味がでてきたプロダクトのコードを
一緒に触ってみよう!
✓
開発に参加したくなるかも!✓
https://github.com/speee/code-party/tree/
master/rubydata-tokyo-meetup-2018
Apache Arrow Powered by Rabbit 2.2.2
おしらせ2
OSS Gate東京ミートアップ
for Red Data Tools in Speee
✓
2018-11-20 19:30-(来週の火曜日)✓
Red Data Toolsメンバーが開発する集まり✓
https://speee.connpass.com/event/105237/
Apache Arrow Powered by Rabbit 2.2.2
おしらせ3
Apache Arrow東京ミートアップ2018✓
2018-12-08 13:30-✓
目的:開発者を増やす
対象プロダクト:Apache Arrow、Red Data Tools、
Ruby/Numo、SciRubyなど
✓
✓
https://speee.connpass.com/event/103514/

More Related Content

What's hot

Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Satoshi Noto
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAmazon Web Services Japan
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証BrainPad Inc.
 
研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習について研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習についてYasuhiro Matsuo
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Noritaka Sekiyama
 
Deep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningDeep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningTakuya UESHIN
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsAmazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsyuichi_komatsu
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...Amazon Web Services Japan
 
ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例知教 本間
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Web Services Japan
 
20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料Kotaro Tsukui
 
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたHive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたRecruit Technologies
 
Tez on EMRを試してみた
Tez on EMRを試してみたTez on EMRを試してみた
Tez on EMRを試してみたSatoshi Noto
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_TokyoKohei KaiGai
 
Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?chibochibo
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでKouhei Sutou
 
Sparkストリーミング検証
Sparkストリーミング検証Sparkストリーミング検証
Sparkストリーミング検証BrainPad Inc.
 

What's hot (20)

Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearch
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証
 
研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習について研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習について
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
 
Deep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningDeep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance Tuning
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsAmazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
 
ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例
 
Running Apache Spark on AWS
Running Apache Spark on AWSRunning Apache Spark on AWS
Running Apache Spark on AWS
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がり
 
20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料
 
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたHive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみた
 
Tez on EMRを試してみた
Tez on EMRを試してみたTez on EMRを試してみた
Tez on EMRを試してみた
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
 
Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
 
Sparkストリーミング検証
Sparkストリーミング検証Sparkストリーミング検証
Sparkストリーミング検証
 
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
 
Machine Learning on AWS
Machine Learning on AWS Machine Learning on AWS
Machine Learning on AWS
 

Similar to Apache Arrow

20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77nkt77
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77nkt77
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京Yuko Mori
 
dots. ビッグデータオールスターズ: Azure 畠山
dots. ビッグデータオールスターズ: Azure 畠山dots. ビッグデータオールスターズ: Azure 畠山
dots. ビッグデータオールスターズ: Azure 畠山Daiyu Hatakeyama
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りKouhei Sutou
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
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
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangTakeru INOUE
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンseiichi arai
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance TuningTakuya UESHIN
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するTakahiro Inoue
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-recotech
 

Similar to Apache Arrow (20)

20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
dots. ビッグデータオールスターズ: Azure 畠山
dots. ビッグデータオールスターズ: Azure 畠山dots. ビッグデータオールスターズ: Azure 畠山
dots. ビッグデータオールスターズ: Azure 畠山
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
Apache Spark on Azure
Apache Spark on AzureApache Spark on Azure
Apache Spark on Azure
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
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 勉強会資料
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
Apache geode at-s1p
Apache geode at-s1pApache geode at-s1p
Apache geode at-s1p
 
Nginx
NginxNginx
Nginx
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解する
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版Kouhei Sutou
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムKouhei Sutou
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!Kouhei Sutou
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーKouhei Sutou
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!Kouhei Sutou
 
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?Kouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extension
 
PGroonga & Zulip
PGroonga & ZulipPGroonga & Zulip
PGroonga & Zulip
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
 

Recently uploaded

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

Apache Arrow

  • 1. Apache Arrow Powered by Rabbit 2.2.2 Apache Arrow 須藤功平 株式会社クリアコード RubyData Tokyo Meetup 2018-11-17
  • 2. Apache Arrow Powered by Rabbit 2.2.2 Apache Arrow 各種言語で使える インメモリー データ処理 プラットフォーム
  • 3. Apache Arrow Powered by Rabbit 2.2.2 提供するもの 高速なデータフォーマット✓ 高速なデータ処理ロジック 各プロダクトで個別に実装するより 一緒にいいものを実装して共有しよう! ✓ ✓ 効率的なデータ交換処理✓ ...✓
  • 4. Apache Arrow Powered by Rabbit 2.2.2 利用例 高速なデータ処理ロジック Apache Arrow提供 高速なデータフォーマット 効率的なデータ交換処理 分散処理ツール コーディネーター ワーカー データ収集 ツール データ前処理 ツール クエリー 実行エンジン 可視化 ツール ワーカー ワーカー
  • 5. Apache Arrow Powered by Rabbit 2.2.2 大事にすること1 効率的なデータ交換
  • 6. Apache Arrow Powered by Rabbit 2.2.2 前提 イマドキの データ処理システムは 単一コンポーネントで 完結しない
  • 7. Apache Arrow Powered by Rabbit 2.2.2 複数コンポーネント メリット: コンポーネント毎に適した言語を使える✓ ✓ デメリット: データ交換が増える(オーバーヘッド)✓ ✓
  • 8. Apache Arrow Powered by Rabbit 2.2.2 データ交換コスト シリアライズコスト✓ 転送コスト✓ デシリアライズコスト✓
  • 9. Apache Arrow Powered by Rabbit 2.2.2 コスト例:JSON シリアライズコスト [1] -#to_json-> "[1]" 転送コスト -output#write-> -input#read-> デシリアライズコスト "[1]" -JSON.parse-> [1]
  • 10. Apache Arrow Powered by Rabbit 2.2.2 コスト比較例:JSON n = 1000000 numbers = n.times.to_a JSON.dump(numbers, json_file) JSON.load(json_file)
  • 11. Apache Arrow Powered by Rabbit 2.2.2 コスト比較例:Apache Arrow n = 1000000 numbers = Arrow::Int32Array.new(numbers) arrow_table = Arrow::Table.new("number" => numbers) arrow_table.save(arrow_path) Arrow::Table.load(arrow_path)
  • 12. Apache Arrow Powered by Rabbit 2.2.2 コスト比較例 実行時間 JSON比 JSON 0.099秒 1 Apache Arrow 0.002秒 1/50
  • 13. Apache Arrow Powered by Rabbit 2.2.2 データ交換コストの影響 コンポーネント数と正の相関 コンポーネントが増えると無視できない✓ ✓ データ量と正の相関 データが多くなると無視できない✓ ✓
  • 14. Apache Arrow Powered by Rabbit 2.2.2 まとめ イマドキのデータ処理システムで 大量データを処理するなら データ交換コストを無視できない ✓ Apache Arrowはデータ交換コストが低い 仕組みは後述✓ ✓
  • 15. Apache Arrow Powered by Rabbit 2.2.2 大事にすること2 各種言語で使えること
  • 16. Apache Arrow Powered by Rabbit 2.2.2 各種言語 Java, C++, Python, C, Ruby, Lua, JavaScript, Go, Rust, MATLAB, R, C#
  • 17. Apache Arrow Powered by Rabbit 2.2.2 イマドキのデータ処理システム コンポーネント毎に適した言語を採用 採用言語でApache Arrowを使えないと システムでApache Arrowを使えない ✓ ✓ Apache Arrowに対応していれば コンポーネントでその言語を採用しやすい Railsが活きるコンポーネントでRubyを使うとか✓ ✓
  • 18. Apache Arrow Powered by Rabbit 2.2.2 実現方法 ネイティブ実装 Java, C++, JavaScript, Go, Rust, C#✓ メリット:扱いやすい(インストールが楽とか)✓ ✓ C++実装のバインディング Python, C, Ruby, Lua, MATLAB, R✓ メリット:高速・実装の共有✓ ✓
  • 19. Apache Arrow Powered by Rabbit 2.2.2 まとめ Apache Arrowは各種言語で使える Rubyと他の言語でのデータ交換が楽になる✓ ✓ Ruby実装はC++実装のバインディング 速い・豊富な機能(C++実装はすごく進んでいる)✓ ✓
  • 20. Apache Arrow Powered by Rabbit 2.2.2 大事にすること3 速いこと
  • 21. Apache Arrow Powered by Rabbit 2.2.2 速さが必要な理由 大量のデータを 処理するためポイント:大量データ前提の設計
  • 22. Apache Arrow Powered by Rabbit 2.2.2 速いデータフォーマット パースせずに使えるデータフォーマット メモリー上で効率よく扱える並びでデータを配置✓ パースしなくてよいし、そのまま使っても速い✓ ✓ 既存のデータの並びと互換性あり 例:NumPyの数値配列と互換✓ 互換性があるとゼロコピーで使える✓ ✓
  • 23. Apache Arrow Powered by Rabbit 2.2.2 速いデータ処理 SIMD・キャッシュメモリー・マルチコアで 高速化 データをアライン・局所化・リードオンリーに✓ ✓ 高速な式評価器 式:column1 + column2みたいなやつ ifとかも使える ✓ Gandiva:式をJITコンパイルして実行✓ ✓
  • 24. Apache Arrow Powered by Rabbit 2.2.2 データ処理例:Ruby n = 100000 ruby_table = n.times.collect do { "number1" => rand, "number2" => rand, } end ruby_table.collect do |record| record["number1"] + record["number2"] end
  • 25. Apache Arrow Powered by Rabbit 2.2.2 データ処理例:Numo::NArray n = 100000 numo_number1 = Numo::DFloat.new(n).rand numo_number2 = Numo::DFloat.new(n).rand numo_number1 + numo_number2
  • 26. Apache Arrow Powered by Rabbit 2.2.2 データ処理例:Gandiva n = 100000 arrow_number1 = Arrow::DoubleArray.new(n.times.collect {rand}) arrow_number2 = Arrow::DoubleArray.new(n.times.collect {rand}) arrow_table = Arrow::Table.new("number1" => arrow_number1, "number2" => arrow_number2)
  • 27. Apache Arrow Powered by Rabbit 2.2.2 データ処理例:Gandiva # 次のリリースまでにいい感じに書けるようにする予定 schema = arrow_table.schema expression = Gandiva::Expression.new("add", [schema[:number1], schema[:number2]], Arrow::Field.new("sum", :double)) projector = Gandiva::Projector.new(schema, [expression]) arrow_table.each_record_batch do |record_batch| projector.evaluate(record_batch) end
  • 28. Apache Arrow Powered by Rabbit 2.2.2 データ処理例 実行時間 Ruby比 Ruby 0.010247秒 1 Numo::NArray 0.000158秒 1/67 Gandiva 0.000459秒 1/25 Numo::NArrayがすごくがんばっている
  • 29. Apache Arrow Powered by Rabbit 2.2.2 速いデータ交換 同一マシン上での交換 メモリーファイルシステム上に置いてmmap✓ Plasma:データ共有サーバーを動かしてIPC Inter-Process Communication ✓ ✓ 別マシン上での交換 Arrow Flight:gRPCベースのRPCフレームワーク✓ ✓
  • 30. Apache Arrow Powered by Rabbit 2.2.2 GPUで速い Plasma:GPU対応✓ RAPIDS:NVIDIAのGPUをデータサイエンスで 活用するためのプロジェクト libgdf:Apache Arrowフォーマットのデータを GPUで扱うデータフレームライブラリー Rubyバインディングはまだない ✓ ✓
  • 31. Apache Arrow Powered by Rabbit 2.2.2 まとめ Apache Arrowは速い 速いデータフォーマット✓ 速いデータ処理(もっと速くなるはず)✓ 速いデータ交換✓ ✓ 今後、GPUももっと活用していく✓
  • 32. Apache Arrow Powered by Rabbit 2.2.2 Apache Arrowのこれから例 データフォーマットの 相互変換強化
  • 33. Apache Arrow Powered by Rabbit 2.2.2 相互変換:Apache Parquet # Apache Arrow→Apache Parquet arrow_table.save("data.parquet") # Apache Parquet→Apache Arrow Arrow::Table.load("data.parquet")
  • 34. Apache Arrow Powered by Rabbit 2.2.2 相互変換:Feather # Apache Arrow→Feather arrow_table.save("data.feather") # Feather→Apache Arrow Arrow::Table.load("data.feather")
  • 35. Apache Arrow Powered by Rabbit 2.2.2 相互変換:Apache ORC # Apache ORC→Apache Arrow Arrow::Table.load("data.orc")
  • 36. Apache Arrow Powered by Rabbit 2.2.2 相互変換:CSV # Apache Arrow→CSV arrow_table.save("data.csv") # CSV→Apache Arrow Arrow::Table.load("data.csv")
  • 37. Apache Arrow Powered by Rabbit 2.2.2 CSV読み込み例 # 標準ライブラリー(Ruby実装) CSV.foreach(path) {|row| row} # 拡張ライブラリー Ccsv.foreach(path) {|row| row} # C++実装 Arrow::Table.load(path, use_threads: true)
  • 38. Apache Arrow Powered by Rabbit 2.2.2 CSV読み込み時間 実行時間 csv比 csv 0.818315秒 1 ccsv 0.064988秒 1/13 Apache Arrow 0.009030秒 1/90
  • 39. Apache Arrow Powered by Rabbit 2.2.2 相互変換:Rubyオブジェクト Rubyバインディング限定 # Active Record→Apache Arrow User.all.to_arrow # Numo::NArray→Apache Arrow narray.to_arrow # NMatrix→Apache Arrow matrix.to_arrow
  • 40. Apache Arrow Powered by Rabbit 2.2.2 相互変換の今後 JSON→Apache Arrow✓ Apache Avro→Apache Arrow✓
  • 41. Apache Arrow Powered by Rabbit 2.2.2 Apache Arrowのこれから(もっと) RDBMS連携強化 PostgreSQL・MySQLでの実行結果を Apache Arrowフォーマットで返す ✓ ✓ テンソルサポート強化✓ ...✓
  • 42. Apache Arrow Powered by Rabbit 2.2.2 Rubyバインディングの今後 Plasma対応✓ GandivaバインディングのAPIをいい感じに✓ バインディングフレームワークの高速化✓ 一緒に開発しようぜ!
  • 43. Apache Arrow Powered by Rabbit 2.2.2 Apache ArrowとRubyまわりの今後 libgdfのRubyバインディング開発✓ gumath/xnd/ndtypesとの連携✓ 一緒に開発しようぜ!
  • 44. Apache Arrow Powered by Rabbit 2.2.2 おしらせ1 コード懇親会(今日の懇親会)✓ 興味がでてきたプロダクトのコードを 一緒に触ってみよう! ✓ 開発に参加したくなるかも!✓ https://github.com/speee/code-party/tree/ master/rubydata-tokyo-meetup-2018
  • 45. Apache Arrow Powered by Rabbit 2.2.2 おしらせ2 OSS Gate東京ミートアップ for Red Data Tools in Speee ✓ 2018-11-20 19:30-(来週の火曜日)✓ Red Data Toolsメンバーが開発する集まり✓ https://speee.connpass.com/event/105237/
  • 46. Apache Arrow Powered by Rabbit 2.2.2 おしらせ3 Apache Arrow東京ミートアップ2018✓ 2018-12-08 13:30-✓ 目的:開発者を増やす 対象プロダクト:Apache Arrow、Red Data Tools、 Ruby/Numo、SciRubyなど ✓ ✓ https://speee.connpass.com/event/103514/