rabbit-slide-kou-oss-forum-apache-arrow 2018.12.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 19c2d5c301114c40697cc7b7a82052c256caacd8ddf1881d14adc30305fc375d
4
+ data.tar.gz: 658ef8490563c08977a16de4719d8e06e46a2dbb6d82c07231990d4c22cc935c
5
+ SHA512:
6
+ metadata.gz: bf4e2ab884b62c270073538c99bd3d281593c86ea90a1ef79f9740b927733ebc5206e5003a3d149cd0787e1ee50102289ffd7f871fa7433b3bee6bc0794a825a
7
+ data.tar.gz: a4ce30122ce2a7b12766f5769eb61b1db7dffb007c1c7f8284936a11d392dcb3359932ba5c33422eead8b5a869dc2d0ae4619ebe6cda7919cae53f37e9929c84
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ --size 800,450 apache-arrow.rab
@@ -0,0 +1,52 @@
1
+ = Apache Arrow - データ処理ツールの次世代プラットフォーム
2
+
3
+ みなさんはApache Arrowを知っていますか? 普段データを処理している人でも今はまだ知らない人の方が多いかもしれません。しかし、数年後には「データ処理をしている人ならほとんどの人が知っている」となるプロダクトです。(そうなるはずです。)
4
+
5
+ Apache Arrowはメモリー上でデータ処理するときに必要なもの一式を提供します。たとえば、効率的なデータ交換のためのデータフォーマット、CPU/GPUの機能を活用した高速なデータ操作機能などです。
6
+
7
+ 一部のデータ処理ツールではすでにApache Arrowを使い始めています。たとえば、Apache SparkはApache Arrowを活用することでPySpark(PythonからApache Sparkを使うためのモジュール)とのやりとりを高速化しています。データ量によっては10倍以上も高速になります。(リンク先の例では20秒→0.7秒と約30倍高速になっています。)
8
+
9
+ この講演ではApache Arrowの概要だけでなく最新情報も紹介します。この講演を聞くことでApache Arrowのことを網羅的に把握できます。
10
+
11
+ Apache Arrowはデータ処理ツールが共通で必要なもの一式を提供するので、より多くのツールがApache Arrowを活用し、より多くの人がApache Arrowの開発に参加すると、より多くの人が豊かになります。Apache ArrowはOSSなのでだれでも自由に活用したり開発に参加したりできます。Apache Arrowのことを知ってOSSならではの「共有するほど豊かになる」アプローチに参加しましょう!
12
+
13
+ == ライセンス
14
+
15
+ === スライド
16
+
17
+ CC BY-SA 4.0
18
+
19
+ 原著作者名は以下の通りです。
20
+
21
+ * 須藤功平(またはKouhei Sutou)
22
+
23
+ === 画像
24
+
25
+ ==== クリアコードのロゴ
26
+
27
+ CC BY-SA 4.0
28
+
29
+ 原著作者:株式会社クリアコード
30
+
31
+ ページヘッダーで使っています。
32
+
33
+ == 作者向け
34
+
35
+ === 表示
36
+
37
+ rake
38
+
39
+ === 公開
40
+
41
+ rake publish
42
+
43
+ == 閲覧者向け
44
+
45
+ === インストール
46
+
47
+ gem install rabbit-slide-kou-oss-forum-apache-arrow
48
+
49
+ === 表示
50
+
51
+ rabbit rabbit-slide-kou-oss-forum-apache-arrow.gem
52
+
@@ -0,0 +1,18 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ spec.files += Dir.glob("bench-*.rb")
9
+ spec.files += Dir.glob("images/**/*.*")
10
+ # spec.files -= Dir.glob("private/**/*.*")
11
+ spec.add_runtime_dependency("rabbit-theme-clear-code")
12
+ end
13
+
14
+ desc "Tag #{spec.version}"
15
+ task :tag do
16
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
17
+ sh("git", "push", "--tags")
18
+ end
@@ -0,0 +1,756 @@
1
+ = Apache Arrow
2
+
3
+ : subtitle
4
+ データ処理ツールの次世代プラットフォーム
5
+ : author
6
+ 須藤功平
7
+ : institution
8
+ 株式会社クリアコード
9
+ : content-source
10
+ 日本OSS推進フォーラム アプリケーション部会 第10回勉強会
11
+ : date
12
+ 2018-12-04
13
+ : start-time
14
+ 2018-12-04T18:00:00+09:00
15
+ : end-time
16
+ 2018-12-04T19:00:00+09:00
17
+ : theme
18
+ .
19
+
20
+ = 自己紹介:名前
21
+
22
+ * 須藤功平(すとうこうへい)\n
23
+ (('note:「と」はにごらない!'))
24
+ * よく使うアカウント名:kou\n
25
+ (('note:KOUhei'))
26
+ * ↑を使えないときのアカウント名:ktou\n
27
+ (('note:Kouhei suTOU'))
28
+
29
+ = 自己紹介:プログラミング
30
+
31
+ * Rubyが好き
32
+ * 2004-01からコミッター
33
+ * 130くらいのライブラリーをメンテナンス\n
34
+ (('note:詳細は((<RubyKaigi 2018でのキーノート|URL:https://rubykaigi.org/2018/presentations/ktou.html>))を参照'))
35
+ * Rubyでプレゼンツールも作っている(('note:(このツール)'))
36
+ * C/C++を書いている時間も結構ある
37
+
38
+ = 自己紹介:C/C++を書く理由
39
+
40
+ * RubyでC/C++のライブラリーを使うため!\n
41
+ (('note:Rubyを書くためにC/C++を書く'))
42
+ * Apache ArrowをC++で開発しているのもそう
43
+ * テストはRubyで書いている
44
+
45
+ = 自己紹介:Apache Arrowの開発
46
+
47
+ * 2016-12-21に最初のコミット
48
+ * 2017-03-16にGLibバインディングを寄贈
49
+ * 2017-05-10にコミッター
50
+ * 2017-09-15にPMCメンバー
51
+ * 2018-12-02現在コミット数3位(221人中)
52
+
53
+ = 自己紹介:仕事
54
+
55
+ * ((<株式会社クリアコード|URL:https://www.clear-code.com/>))の代表取締役
56
+ * 自由なソフトウェアでビジネスをする会社\n
57
+ (('note:自由なソフトウェア:OSSが参考にしたやつ'))
58
+ * 私の業務内容
59
+ * Ruby/Groonga関連の開発・サポート\n
60
+ (('note:Groonga:全文検索エンジン。10年くらいやっている。'))
61
+ * 自由なソフトウェアの推進
62
+ * ((<データ処理ツールの開発事業立ち上げ|URL:https://www.clear-code.com/blog/2018/7/11.html>))((*(New!)*))
63
+
64
+ = データ処理ツールの開発事業
65
+
66
+ * データ分析をする事業じゃない
67
+ * データ分析をする人たちが使うツールを\n
68
+ 開発する事業
69
+ * Apache Arrowはそのために有用なツール\n
70
+ (('note:Apache Arrowの開発に参加し始めたのはRubyで使いたかったから'))\n
71
+ (('note:事業立ち上げのためにApache Arrowの開発に参加し始めたわけではない'))\n
72
+ (('note:Apache Arrowの開発に参加していたら面白そうと思えてきた'))
73
+ * 募集:開発して欲しい・開発したい(('note:(転職したい)'))
74
+
75
+ = Apache Arrow
76
+
77
+ 各種言語で使える\n
78
+ インメモリー\n
79
+ データ処理\n
80
+ プラットフォーム
81
+
82
+ = 実現すること
83
+
84
+ データ処理の効率化\n
85
+ (大量データが対象)
86
+
87
+ = 効率化のポイント
88
+
89
+ * 速度
90
+ * 速いほど効率的
91
+ * 実装コスト
92
+ * 低いほど効率的
93
+
94
+ = 速度向上方法
95
+
96
+ * 遅い部分を速く
97
+ * 高速化できる部分を最適化
98
+
99
+ = 遅い部分
100
+
101
+ データ交換
102
+
103
+ = データ交換
104
+
105
+ * データ処理ツール間で必要
106
+ * データ処理システム
107
+ * 複数ツールを組み合わせて実現
108
+ * データ処理システムではデータ交換が必須
109
+
110
+ = データ処理システム例
111
+
112
+ # img
113
+ # src = images/data-processing-system.svg
114
+ # relative_width = 100
115
+
116
+ == スライドプロパティー
117
+
118
+ : enable-title-on-image
119
+ false
120
+
121
+ = データ交換処理
122
+
123
+ (1) シリアライズ\n
124
+ (('note:データをバイト列へ変換'))
125
+ (2) 転送\n
126
+ (('note:バイト列を別ツールに渡す'))
127
+ (3) デシリアライズ\n
128
+ (('note:バイト列からデータを復元'))
129
+
130
+ = データ交換処理:必要なリソース
131
+
132
+ (1) シリアライズ:CPU
133
+ (2) 転送:I/O(('note:(ネットワーク・ストレージ・メモリー)'))
134
+ (3) デシリアライズ:CPU
135
+
136
+ = Ruby+JSONでデータ交換
137
+
138
+ # rouge ruby
139
+
140
+ # 1000要素の数値配列
141
+ n = 1000
142
+ numbers = n.times.collect {rand}
143
+ # シリアライズ
144
+ JSON.dump(numbers, output)
145
+ # デシリアライズ
146
+ JSON.load(input)
147
+
148
+ = Ruby+JSONの速度の傾向
149
+
150
+ # RT
151
+
152
+ n, シリアライズ, デシリアライズ
153
+
154
+ 1000, 0.011秒, 0.004秒
155
+ 10000, 0.093秒, 0.037秒
156
+ 100000, 0.798秒, 0.369秒
157
+
158
+ (('note:注:ストレージI/Oなしで計測'))
159
+
160
+ データ量の増加と同じくらいの比率で遅くなる
161
+
162
+ = データ交換の高速化
163
+
164
+ * データ量が増加すると\n
165
+ シリアライズ・デシリアライズ速度が劣化
166
+ * 速度劣化を抑えられれば高速化可能
167
+
168
+ = Apache Arrowのアプローチ
169
+
170
+ * データフォーマットを定義
171
+ * シリアライズ・デシリアライズが速い
172
+ * データ量増加に影響を受けにくい
173
+ * このフォーマットの普及
174
+ * 各種言語で読み書き処理を実装
175
+
176
+ = Ruby+Apache Arrowでデータ交換
177
+
178
+ # rouge ruby
179
+
180
+ # 1000要素の数値配列
181
+ n = 1000
182
+ numbers = Arrow::Int32Array.new(n.times.collect {rand})
183
+ table = Arrow::Table.new("number" => numbers)
184
+ # シリアライズ
185
+ table.save(output)
186
+ # デシリアライズ
187
+ Arrow::Table.load(input)
188
+
189
+ = Ruby+Apache Arrowの速度の傾向
190
+
191
+ # RT
192
+
193
+ n, シリアライズ, デシリアライズ
194
+
195
+ 1000, 0.0003秒, 0.0004秒
196
+ 10000, 0.0004秒, 0.0004秒
197
+ 100000, 0.0015秒, 0.0004秒
198
+
199
+ (('note:注:ストレージI/Oなしで計測'))
200
+
201
+ 全体的に速い+デシリアライズ速度が一定
202
+
203
+ = Apache Sparkでの高速化事例
204
+
205
+ * PySpark
206
+ * Sparkが分割したデータをPythonで処理
207
+ * Spark⇔PySpark間でデータ交換
208
+ * 従来:pickleでシリアライズ\n
209
+ (('note:pickle:Python標準のシリアライズ方法'))
210
+ * Apache Arrowを使うことで数十倍レベルの高速化
211
+
212
+ = Apache Arrowフォーマットの特徴
213
+
214
+ * メモリー上でのフォーマットを変換しない
215
+ * JSONは「数値」を「数字」に変換
216
+ * 例:(({29}))(1バイト整数)→(({"29"}))(2バイト文字列)
217
+ * シリアライズ時:変換不要
218
+ * デシリアライズ時:パース不要
219
+
220
+ = メモリーマップの活用
221
+
222
+ * メモリーマップ機能
223
+ * ファイルの内容をメモリー上のデータのように\n
224
+ アクセスできる機能
225
+ * (({read}))せずにデータを使える(データコピー不要)
226
+ * パース不要+メモリーマップ
227
+ * デシリアライズ時にメモリー確保不要
228
+ * 「転送」コスト削減
229
+
230
+ = 遅い部分の高速化まとめ
231
+
232
+ * 遅い部分を速く
233
+ * データ交換を速く
234
+ * 高速化できる部分を最適化
235
+
236
+ = 高速化できる部分
237
+
238
+ 大量データの計算
239
+
240
+ = 大量データの計算の高速化
241
+
242
+ * 各データの計算を高速化
243
+ * まとまったデータの計算を高速化
244
+
245
+ = 各データの計算の高速化
246
+
247
+ * データを局所化
248
+ * CPUのキャッシュメモリーを活用できる
249
+ * 局所化に必要な知識
250
+ * データの使われ方
251
+ * 局所化:一緒に使うデータを近くに置く
252
+
253
+ = 想定ユースケース
254
+
255
+ * OLAP(('note:(OnLine Analytical Processing)'))
256
+ * データから探索的に知見を探し出すような処理
257
+ * 列単位の処理が多い
258
+ * 集計処理・グループ化・ソート…
259
+
260
+ = OLAP向きのデータの持ち方
261
+
262
+ # img
263
+ # src = images/columnar.svg
264
+ # relative_height = 100
265
+
266
+ == スライドプロパティー
267
+
268
+ : enable-title-on-image
269
+ false
270
+
271
+ = まとまったデータの計算を高速化
272
+
273
+ * SIMDを活用\n
274
+ (('note:Single Instruction Multiple Data'))
275
+ * CPU:データをまとめてアラインすると使える\n
276
+ (('note:アライン:データの境界を64の倍数とかに揃える'))
277
+ * GPUの活用
278
+ * スレッドを活用
279
+
280
+ = スレッド活用時のポイント
281
+
282
+ * 競合リソースを作らない
283
+ * リソースロックのオーバーヘッドで遅くなりがち
284
+ * アプローチ
285
+ * リソースを参照するだけ
286
+ * 各スレッドにコピー
287
+
288
+ = Apache Arrowとスレッド
289
+
290
+ * データはリードオンリー
291
+ * スレッド間でオーバーヘッドなしで共有可能
292
+ * データコピーは極力避けたい
293
+ * データ交換時もスレッド活用時も
294
+
295
+ = 高速化のまとめ
296
+
297
+ * 速度
298
+ * 遅い処理(データ交換処理)を高速化
299
+ * 速くできる処理(大量データの計算)を最適化
300
+ * 実装コスト
301
+ * 低いほど効率的
302
+
303
+ = 実装コストを下げる
304
+
305
+ * 共通で使いそうな機能をライブラリー化
306
+ * メリットを受ける人たちみんなで協力して開発
307
+ * 最適化もがんばる
308
+ * Apache Arrowの実装コストは下がらない
309
+ * Apache Arrowを使うツールの実装コストが下がる\n
310
+ (('note:実装コストが下がる:ツール開発者のメリット'))
311
+
312
+ = 今のApache Arrowが提供する機能
313
+
314
+ * 高速なデータフォーマット
315
+ * フォーマット変換機能
316
+ * 効率的なデータ交換処理
317
+ * 高速なデータ処理ロジック
318
+
319
+ (('tag:center'))
320
+ これらの機能が必要ならメリットがある
321
+
322
+ = Apache Arrowの向き不向き
323
+
324
+ * 向き
325
+ * 大量データの交換
326
+ * メモリー上での大量データの分析処理
327
+ * 不向き
328
+ * データの永続化\n
329
+ (('note:処理結果の一時的なキャッシュならアリなケースもある'))
330
+ * OLAPシステムのバックエンド
331
+
332
+ = 実装コストのまとめ
333
+
334
+ * 速度
335
+ * 実装コスト
336
+ * 共通で使いそうな機能をライブラリー化
337
+ * みんなで協力して開発
338
+ * 向いていないケースもあるけど\n
339
+ メリットがある人は一緒に開発しよう!
340
+
341
+ = Apache Arrowが扱えるデータ
342
+
343
+ * データフレーム
344
+ * 多次元配列
345
+
346
+ = データフレーム
347
+
348
+ * 行と列で管理する2次元データ\n
349
+ (('note:RDBMSでいう表'))
350
+ * すべての行は同じ列を持つ
351
+ * 各列は異なる型にできる
352
+ * すべての型でnullをサポート
353
+ * 2次元配列との違い
354
+ * 2次元配列はすべての値が同じ型
355
+
356
+ = 扱える型:真偽値・数値
357
+
358
+ * 真偽値
359
+ * 整数({8,16,32,64}ビット{非負,}整数)
360
+ * 浮動小数点数({16,32,64}ビット)
361
+ * 128ビット小数
362
+
363
+ リトルエンディアンのみ対応\n
364
+ (('note:ビッグエンディアンに対応させようという動きもある:((<ARROW-3476|URL:https://issues.apache.org/jira/browse/ARROW-3476>))'))
365
+
366
+ = 扱える型:文字列・バイト列
367
+
368
+ * UTF-8文字列
369
+ * バイナリーデータ({可変,固定}長)
370
+
371
+ = 扱える型:日付・タイムスタンプ
372
+
373
+ * 日付
374
+ * UNIXエポックからの経過日数(32bit)
375
+ * UNIXエポックからの経過ミリ秒数(64bit)
376
+ * タイムスタンプ(64ビット整数)
377
+ * UNIXエポックからの経過{,ミリ}秒数
378
+ * UNIXエポックからの経過{マイクロ,ナノ}秒数
379
+
380
+ = 扱える型:時間
381
+
382
+ * 時間
383
+ * 深夜0時からの経過{,ミリ}秒数\n
384
+ (32bit整数)
385
+ * 深夜0時からの経過{マイクロ,ナノ}秒数\n
386
+ (64bit整数)
387
+
388
+ = 扱える型:リスト
389
+
390
+ * 0個以上の同じ型の値を持つ
391
+ * 例:32ビット整数のリスト
392
+ * 👍0要素:(({[]}))
393
+ * 👍2要素:(({[2, 3]}))
394
+ * 👎型が違う:(({[1, "X"]}))
395
+
396
+ = 扱える型:構造体
397
+
398
+ * 1個以上のフィールドを持つ
399
+ * 各フィールドは別の型にできる
400
+ * 例:aは32ビット整数、bはUTF-8文字列
401
+ * 👍全部ある:(({{a: 1, b: "X"}}))
402
+ * 👍nullもOK:(({{a: 1, b: null}}))
403
+ * 👎bがない:(({{a: 1}}))
404
+
405
+ = 扱える型:共用体
406
+
407
+ * 1個以上のフィールドを持つ
408
+ * 各フィールドは別の型にできる
409
+ * どれかひとつのフィールドの値のみ設定
410
+ * 例:aは32ビット整数、bはUTF-8文字列
411
+ * 👍aだけある:(({{a: 1}}))
412
+ * 👎2つある:(({{a: 1, b: "X"}}))
413
+
414
+ = 扱える型:辞書
415
+
416
+ * 名義尺度なカテゴリーデータ\n
417
+ (('note:(統計っぽい説明)'))
418
+ * 各値にIDを割り当て、そのIDで値を表現\n
419
+ (('note:(実装よりの説明)'))
420
+ * 例:(({["X","X","Y"]}))を辞書型の列にした場合
421
+ * 値:(({[0, 0, 1]}))
422
+ * IDの割り当て:(({{"X": 0, "Y": 1}}))
423
+
424
+ = データフレームのまとめ
425
+
426
+ * データフレーム
427
+ * 2次元データ
428
+ * 各列は異なる型にできる
429
+ * 型はたくさんある
430
+ * 多次元配列
431
+
432
+ = 多次元配列
433
+
434
+ * n次元のデータを扱う
435
+ * 要素はすべて同じ型
436
+ * 型は整数・浮動小数点数のみ
437
+ * 密・疎ともに対応\n
438
+ (('note:疎は対応中:((<ARROW-854 [Format] Support sparse tensor|URL:https://issues.apache.org/jira/browse/ARROW-854>))'))
439
+
440
+ = 密な多次元配列
441
+
442
+ * データの並び方
443
+ * row-major order: C order
444
+ * column-major order: Fortran order
445
+
446
+ = 疎な多次元配列
447
+
448
+ * データの持ち方
449
+ * COO: 0以外の値の情報だけを持つ
450
+ * CSR: 0以外の値の情報だけを圧縮して持つ
451
+
452
+ = 多次元配列のまとめ
453
+
454
+ * データフレーム
455
+ * 多次元配列
456
+ * n次元データ
457
+ * すべての要素は同じ型の値
458
+ * 型は整数・浮動小数点数のみ
459
+ * 疎・密両方サポート
460
+
461
+ = Apache Arrowが提供する機能
462
+
463
+ * 高速なデータフォーマット
464
+ * フォーマット変換機能
465
+ * 効率的なデータ交換処理
466
+ * 高速なデータ処理ロジック
467
+
468
+ = フォーマット変換機能
469
+
470
+ * Apache Arrowフォーマット
471
+ * インメモリー用のフォーマット
472
+ * 永続化向きではない
473
+ * 永続化されたデータを使う場合
474
+ * 永続化に適したフォーマットで保存
475
+ * 読み込み時にApache Arrowに変換して\n
476
+ インメモリーでの処理にApache Arrowを使う
477
+
478
+ = 対応フォーマット:CSV
479
+
480
+ * よく使われているフォーマット
481
+ * 亜種が多くてパースが大変
482
+
483
+ = 対応フォーマット:Apache Parquet
484
+
485
+ * 永続化用フォーマット
486
+ * 列単位でデータ保存:Apache Arrowと相性がよい
487
+ * 小さい
488
+ * 列単位の圧縮をサポート
489
+ * 速い
490
+ * 必要な部分のみ読み込める(('note:(I/Oが減る)'))
491
+
492
+ = 対応フォーマット:Apache ORC
493
+
494
+ * 永続化用フォーマット
495
+ * 列単位でデータ保存:Apache Arrowと相性がよい
496
+ * Apache Parquetに似ている
497
+ * Apache Hive用に開発
498
+ * 今はHadoopやSparkでも使える
499
+
500
+ = 対応フォーマット:Feather
501
+
502
+ * 永続化用フォーマット
503
+ * 列単位でデータ保存:Apache Arrowと相性がよい
504
+ * データフレームを保存
505
+ * PythonとR間のデータ交換用
506
+ * ((*今は非推奨!*))
507
+ * Apache Arrowを使ってね
508
+
509
+ = 対応中フォーマット:Apache Avro
510
+
511
+ * RPCフレームワーク
512
+ * データフォーマットも提供
513
+ * 永続化にも使えるフォーマット
514
+ * ((<ARROW-1209|URL:https://issues.apache.org/jira/browse/ARROW-1209>))
515
+ * ちょっと止まっている
516
+
517
+ = 非公式対応フォーマット:MDS
518
+
519
+ * ((<Multiple-Dimension-Spread|URL:https://www.slideshare.net/techblogyahoo/multiple-dimension-spread>))
520
+ * Yahoo! Japan開発フォーマット
521
+ * 詳細:((<Apache Arrow東京ミートアップ2018|URL:https://speee.connpass.com/event/103514/>))
522
+ * 2018年12月8日(土)開催
523
+
524
+ = フォーマット変換機能まとめ
525
+
526
+ * 高速なデータフォーマット
527
+ * フォーマット変換機能
528
+ * いろいろ対応している
529
+ * これからも増えそう
530
+ * 効率的なデータ交換処理
531
+ * 高速なデータ処理ロジック
532
+
533
+ = 効率的なデータ交換処理
534
+
535
+ * Plasma
536
+ * 同一ホスト上のプロセス間でのデータ共有
537
+ * Apache Arrow Flight
538
+ * Apache ArrowベースのRPC
539
+ * DB連携
540
+ * 各種DBのレスポンスをApache Arrowに変換
541
+
542
+ = Plasma
543
+
544
+ * 同一ホストでのデータ共有システム
545
+ * サーバー:データ管理
546
+ * クライアント:データ登録・参照
547
+ * Apache Arrowフォーマットは使っていない
548
+ * 任意のバイト列を共有
549
+ * ユースケース:マルチプロセス連携
550
+ * もともと((<Ray|URL:https://ray.readthedocs.io/en/latest/>))(分散計算システム)用に開発
551
+
552
+ = Apache Arrow Flight
553
+
554
+ * Apache ArrowベースのRPCフレームワーク
555
+ * クライント:リクエストデータフレームを送信
556
+ * サーバー:レスポンスデータフレームを返信
557
+ * gRPCベース
558
+
559
+ = DB連携
560
+
561
+ * DBのレスポンスをApache Arrowに変換
562
+ * 対応済み
563
+ * Apache Hive, Apache Impala
564
+ * 対応予定
565
+ * MySQL/MariaDB, PostgreSQL, SQLite
566
+ * SQL Server, ClickHouse
567
+
568
+ = 効率的なデータ交換処理のまとめ
569
+
570
+ * 高速なデータフォーマット
571
+ * フォーマット変換機能
572
+ * 効率的なデータ交換処理
573
+ * 同一ホスト内での高速なデータ交換
574
+ * 異なるホスト間での高速なデータフレーム交換
575
+ * DBのレスポンスをApache Arrowに変換
576
+ * 高速なデータ処理ロジック
577
+
578
+ = 高速なデータ処理ロジック
579
+
580
+ * 高速なデータフレーム処理
581
+ * CPU:コンパイラーの最適化でベクトル化
582
+ * GPU:RAPIDSが((<cuDF|URL:https://github.com/rapidsai/cudf>))を開発
583
+ * 高速なクエリー処理エンジン
584
+ * Gandiva
585
+
586
+ = Gandiva
587
+
588
+ * SQLレベルのクエリーの実行エンジン
589
+ * 四則演算だけではない
590
+ * 集計(('note:((({GROUP BY})))'))やフィルター(('note:((({WHERE})))'))などもカバー
591
+ * 実行時に最適化
592
+
593
+ = Gandiva:実行時に最適化
594
+
595
+ * クエリーを解析して最適化
596
+ * 不要な処理を削除・処理順番を入れ替え\n
597
+ (('note:やるようになるんじゃないかな。。。'))
598
+ * クエリーをJITコンパイルして実行
599
+ * インタプリターが実行、ではない
600
+ * 最適化済みネイティブコードにして実行\n
601
+ (('note:実行環境のCPUに合わせてベクトル化とか'))
602
+
603
+ = 高速なデータ処理ロジックのまとめ
604
+
605
+ * 高速なデータフォーマット
606
+ * フォーマット変換機能
607
+ * 効率的なデータ交換処理
608
+ * 高速なデータ処理ロジック
609
+ * CPUでもGPUでも最適化
610
+ * クエリーレベルの高速な実行エンジン
611
+
612
+ = 対応言語
613
+
614
+ * C, C#, C++, Go, Java, JavaScript, Lua
615
+ * MATLAB, Python, R, Ruby, Rust
616
+
617
+ 非公式実装:
618
+
619
+ * Julia (((<Arrow.jl|URL:https://github.com/ExpandingMan/Arrow.jl>)))
620
+
621
+ = 実装方法
622
+
623
+ * ネイティブ実装
624
+ * C#, C++, Go, Java, JavaScript, Julia, Rust
625
+ * C++バインディング
626
+ * C, Lua, MATLAB, Python, R, Ruby
627
+
628
+ = C#の実装状況
629
+
630
+ * 未対応の型
631
+ * 16bit浮動小数点数・小数・構造体・共用体・辞書
632
+ * 多次元配列未対応
633
+ * 計算未対応
634
+ * Plasma・Flight未対応
635
+
636
+ = C++の実装状況
637
+
638
+ * すべて実装済み
639
+ * 一番実装が進む
640
+ * C++実装のバインディングとして\n
641
+ 開発する言語があるため
642
+ * Apache Parquet実装も取り込んだ
643
+
644
+ = Goの実装状況
645
+
646
+ * 未対応の型
647
+ * 16ビット浮動小数点数・小数・共用体
648
+ * 計算対応(Gandivaは未対応)
649
+ * フォーマット変換はCSVのみ対応
650
+ * Plasma・Flight未対応
651
+
652
+ = Javaの実装状況
653
+
654
+ * 未対応の型
655
+ * 16ビット浮動小数点数
656
+ * 多次元配列未対応
657
+ * 計算対応(Gandivaも対応)
658
+ * フォーマット変換未対応
659
+ * JDBCを使ったDB連携対応
660
+
661
+ = JavaScriptの実装状況
662
+
663
+ * TypeScript実装
664
+ * Webブラウザー上でもNode.js上でも動く
665
+ * 多次元配列未対応
666
+ * 計算対応(Gandivaは未対応)
667
+ * フォーマット変換未対応
668
+ * Plasma・Flight未対応
669
+
670
+ = Juliaの実装状況
671
+
672
+ * 未対応の型
673
+ * 16bit浮動小数点数・小数・構造体・共用体
674
+ * 多次元配列未対応
675
+ * 計算未対応
676
+ * フォーマット変換未対応
677
+ * Plasma・Flight未対応
678
+
679
+ = Rustの実装状況
680
+
681
+ * 未対応の型
682
+ * 小数・バイナリーデータ・共用体・辞書
683
+ * 計算未対応
684
+ * フォーマット変換はCSVのみ対応
685
+ * Plasma・Flight未対応
686
+ * Apache Parquet実装も取り込んだ
687
+
688
+ = C・Lua・Rubyの実装状況
689
+
690
+ * C++バインディング
691
+ * 未対応の型:共用体
692
+ * 計算対応(Gandivaも対応)
693
+ * Plasma対応
694
+ * Flight未対応
695
+
696
+ = MATLABの実装状況
697
+
698
+ * C++バインディング
699
+ * Featherの読み込みのみ対応
700
+
701
+ = Pythonの実装状況
702
+
703
+ * C++バインディング
704
+ * pandas・NumPy相互変換対応
705
+ * 計算対応(Gandivaも対応)
706
+ * Plasma対応
707
+ * Flight未対応
708
+
709
+ = Rの実装状況
710
+
711
+ * C++バインディング
712
+ * 未対応の型:小数・共用体
713
+ * 計算対応(Gandivaは未対応)
714
+ * フォーマット変換はFeatherのみ対応
715
+ * Plasma・Flight未対応
716
+
717
+ = 対応言語まとめ
718
+
719
+ * 基本的な型はすべての言語で対応済み
720
+ * すでにデータ交換用途に使える
721
+ * データの高速な計算は一部言語で対応
722
+ * フォーマット変換も各言語の対応は様々
723
+
724
+ = まとめ
725
+
726
+ * Apache Arrowが言語を超えて実現すること
727
+ * データ交換・データ処理の高速化
728
+ * 実装の共有(共同開発・ライブラリー化)
729
+ * Apache Arrowを使うとメリットがある人は\n
730
+ Apache Arrowの開発にも参加しよう!
731
+
732
+ = Apache Arrowの開発に参加を支援
733
+
734
+ * Apache Arrow東京ミートアップ2018
735
+ * 2018-12-08 13:30-
736
+ * 目的:開発者を増やす
737
+ * 対象プロダクト:Apache Arrow・Apache Spark・Pytho関連・R関連Ruby関連・などなど
738
+
739
+ ((<URL:https://speee.connpass.com/event/103514/>))
740
+
741
+ = OSSをITに活用
742
+
743
+ * 「使う」だけが活用かな
744
+ * 「開発」にも参加するのはどうかな
745
+ * 参加した方が活用できることもあるかも
746
+
747
+ = OSSの開発に参加を支援
748
+
749
+ * OSS Gate東京ワークショップ
750
+ * 2018-12-15 13:00-
751
+ * やること:「OSSの開発に参加」を体験
752
+ * 対象プロダクト:好きなOSS
753
+
754
+ (('tag:small'))
755
+ ((<URL:https://oss-gate.doorkeeper.jp/events/76042>))
756
+