rabbit-slide-kou-davis-2023 2023.3.29.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cd85107b1cf5e5e69a9812d06224c827c17f5ada0b0833f4a53ac37b2c232676
4
+ data.tar.gz: 38732822670692e9b081b2e1130b2b39f9b787f09a5a28733c8d09f6c12c47d8
5
+ SHA512:
6
+ metadata.gz: 475e3e863e6d07f2fa6f1d073c3aaaef5c77cbaa407e5e7cd613a281be4dba4f5a89973166e46a55785c9bb732e0229887b4a9aed4128e6a5bd00161d1848af6
7
+ data.tar.gz: ac9c7993e03762e2307d34e536220c384fec803859f7f058ac4c395f606c1e2a3c0749fbba7b29139ed885afbd732f40cd96630b4b9f9f9dac32d0d94ee62b86
data/.rabbit ADDED
@@ -0,0 +1,2 @@
1
+ --size 1920,1080
2
+ arrow-and-red-data-tools.rab
data/README.rd ADDED
@@ -0,0 +1,44 @@
1
+ = Apache Arrow, Red Arrow, Red Data Tools
2
+
3
+ Apache Arrow、Red Arrow、Red Data Toolsという観点からRubyにおけるデータ処理の現状を説明します。
4
+
5
+ == ライセンス
6
+
7
+ === スライド
8
+
9
+ CC BY-SA 4.0
10
+
11
+ 原著作者名は以下の通りです。
12
+
13
+ * 須藤功平(またはSutou Kouhei)
14
+
15
+ === 画像
16
+
17
+ ==== クリアコードのロゴ
18
+
19
+ CC BY-SA 4.0
20
+
21
+ 原著作者:株式会社クリアコード
22
+
23
+ ページヘッダーで使っています。
24
+
25
+ == 作者向け
26
+
27
+ === 表示
28
+
29
+ rake
30
+
31
+ === 公開
32
+
33
+ rake publish
34
+
35
+ == 閲覧者向け
36
+
37
+ === インストール
38
+
39
+ gem install rabbit-slide-kou-davis-2023
40
+
41
+ === 表示
42
+
43
+ rabbit rabbit-slide-kou-davis-2023.gem
44
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
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("images/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ spec.add_runtime_dependency("rabbit-theme-clear-code")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,572 @@
1
+ = Apache Arrow,\nRed Arrow,\nRed Data Tools
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ 株式会社クリアコード
7
+ : content-source
8
+ 地球流体データ解析・数値計算ワークショップ
9
+ : date
10
+ 2023-03-29
11
+ : start-time
12
+ 2023-03-29T13:30:00+09:00
13
+ : end-time
14
+ 2023-03-29T14:30:00+09:00
15
+ : theme
16
+ clear-code
17
+
18
+ = 須藤功平
19
+
20
+ * kou
21
+ * 2004年からRubyコミッター
22
+ * 2017年から\n
23
+ Apache Arrowのコミッター
24
+ * 2017年にRed Data Tools開始
25
+ * 2022年のApache ArrowのPMCチェアー
26
+
27
+ # image
28
+ # src = http://www.gravatar.com/avatar/ee6ffca720cc428d70247dcd7377dd48.jpeg?s=800
29
+ # align = right
30
+ # vertical-align = top
31
+ # relative-width = 30
32
+ # relative-margin-right = -10
33
+ # relative-margin-bottom = 0.5
34
+ # caption-font-size = 1
35
+
36
+ = 今日の話
37
+
38
+ * あなたたちもRubyでデータ処理できるように((*する*))側にまわるんだよ!!!
39
+ * これからのデータ処理界隈のことを知るにはApache Arrowのことを知っておくといいから基本を説明するね!
40
+
41
+ = Rubyでデータ処理、2023
42
+
43
+ * 相変わらずPythonとかRほどはできない
44
+ * でも、できることは増えている
45
+
46
+ = できること
47
+
48
+ * 多次元数値配列の演算:Numo::NArray
49
+ * データフレームでの前処理:RedAmber他
50
+ * 可視化:Charty他
51
+ * データセットへのアクセス:Red Datasets
52
+ * 著名データフォーマットの読み書き
53
+ * ...
54
+
55
+ = なぜできることが増えているのか
56
+
57
+ 手を動かしている\n
58
+ 人たちが\n
59
+ いるから!
60
+
61
+ = 手を動かしている人たち
62
+
63
+ * Red Data Tools
64
+ * Ruby Numo (('note:(NUmerical MOdule)'))
65
+ * SciRuby
66
+ * BioRuby
67
+ * ankane
68
+ * ...
69
+
70
+ = あなたがするべきこと
71
+
72
+ 私たちと一緒に\n
73
+ 手を動かす!
74
+
75
+ = Red Data Toolsポリシー
76
+
77
+ (1) Rubyコミュニティーを超えて協力する
78
+ (2) 非難することよりも手を動かすことが大事
79
+ (3) (('note:一回だけの活発な活動よりも小さくてもいいので'))\n
80
+ 継続的に活動することが大事
81
+ (4) 現時点での知識不足は問題ではない
82
+ (5) 部外者からの非難は気にしない
83
+ (6) 楽しくやろう!
84
+
85
+ (('tag:center'))
86
+ (('note:((<URL:https://red-data-tools.github.io/ja/>))'))
87
+
88
+ = 活動例
89
+
90
+ Apache Arrowの開発
91
+
92
+ = Apache Arrow
93
+
94
+ インメモリー\n
95
+ データ処理の\n
96
+ 共通基盤
97
+
98
+ = 共通基盤
99
+
100
+ 各データ処理プロダクト共通で必要なやつはみんなで協力して作って共有しようぜ!
101
+
102
+ = 共通で必要なやつ?共有?
103
+
104
+ * たくさんある!
105
+ * 今どきはPython用に作られていたようなやつら
106
+ * 理由:すでにPythonにエコシステムがあるから
107
+ * なんで共有したいの?
108
+ * Python以外でも使いたい!(('note:(エコシステムがあるのに!?)'))
109
+ * RとかJavaとか!最近だとRust!\n
110
+ (('note:Rubyも仲間に入れて!!!'))
111
+
112
+ = Rubyとデータ処理\n(('note:負のループ'))
113
+
114
+ # mermaid
115
+ # relative_width = 90
116
+ graph LR;
117
+ A[ユーザーが少ない]-->B[コミュニティーが小さい];
118
+ B-->C[開発者が少ない];
119
+ C-->D[便利ツールが少ない];
120
+ D-->A;
121
+
122
+ == Slide properties
123
+
124
+ : enable-title-on-image
125
+ false
126
+
127
+ = この負のループを打ち破るには?
128
+
129
+ # mermaid
130
+ # relative_width = 40
131
+ # align = right
132
+ # vertical-align = top
133
+ # relative-margin-right = -10
134
+ # relative-margin-bottom = 0.5
135
+ graph LR;
136
+ A[ユーザーが少ない]-->B[コミュニティーが小さい];
137
+ B-->C[開発者が少ない];
138
+ C-->D[便利ツールが少ない];
139
+ D-->A;
140
+
141
+ * ユーザーが少ない:便利ツールを増やす?
142
+ * コミュニティーが小さい:ユーザー増?
143
+ * 開発者少:コミュニティーを大きくする?
144
+ * 便利ツールが少ない:開発者を増やす?
145
+
146
+ = 少ない開発者で便利ツールを増やす
147
+
148
+ # mermaid
149
+ # relative_width = 90
150
+ graph LR;
151
+ subgraph all[" "]
152
+ direction TB
153
+ subgraph 負のループ
154
+ N0[ユーザーが少ない]-->N1[コミュニティーが小さい];
155
+ N1-->N2[開発者が少ない];
156
+ N2-->N3[便利ツールが少ない];
157
+ N3-->N0;
158
+ end
159
+ subgraph 正のループ
160
+ P0[ユーザーが多い]-->P1[コミュニティーが大きい];
161
+ P1-->P2[開発者が多い];
162
+ P2-->P3[便利ツールが多い];
163
+ P3-->P0;
164
+ end
165
+ N2-.->P3;
166
+ end
167
+ style all fill-opacity:0,stroke-width:0px
168
+
169
+ == Slide properties
170
+
171
+ : enable-title-on-image
172
+ false
173
+
174
+ = そこでApache Arrowですよ!!!
175
+
176
+ * 共通基盤を共有!
177
+ * Rubyも乗るしかない!
178
+ * 他の言語の人たちと共同開発できる
179
+ * Ruby開発者が少なくても便利ツールを増やせる
180
+
181
+ = ということでやっている
182
+
183
+ * 2017年からApache Arrowのコミッター
184
+ * 2017年にRed Data Tools開始
185
+ * 1. Rubyコミュニティーを超えて協力する
186
+ * 2022年のApache ArrowのPMCチェアー
187
+
188
+ = 成果例
189
+
190
+ * Red Arrow
191
+ * Apache ArrowのRubyバインディング
192
+ * RedAmber
193
+ * Red Arrowベースのデータフレーム
194
+ * Red Parquet
195
+ * Apache Parquetの読み書き
196
+
197
+ = Apache Arrowが提供するもの
198
+
199
+ * 読み書きがすごく速いデータフォーマット
200
+ * ↑を活かしたRPCフレームワーク
201
+ * ↑を活かしたDB連携機能
202
+ * 各種データフォーマットとの相互変換
203
+ * 計算がすごく速いメモリーレイアウト
204
+ * ↑を活かした速い計算
205
+ * ...
206
+
207
+ = すごく速いデータフォーマット
208
+
209
+ # img
210
+ # src = https://slide.rabbit-shocker.org/authors/kou/db-tech-showcase-online-2020/why-apache-arrow-format-is-fast.pdf
211
+ # relative_height = 80
212
+
213
+ (('tag:center'))
214
+ (('note:((<URL:https://slide.rabbit-shocker.org/authors/kou/db-tech-showcase-online-2020/>))'))
215
+
216
+ = Apache Arrowフォーマット
217
+
218
+ * データフォーマット
219
+ * 通信用とインメモリー用の両方
220
+ * 表形式のデータ用
221
+ * =データフレーム形式のデータ用
222
+ * 速い!
223
+
224
+ = 速い!
225
+
226
+ * データ((*交換*))が速い!
227
+ * データ((*処理*))が速い!
228
+
229
+ = データ交換が速い!
230
+
231
+ (('tag:center'))
232
+ (('tag:margin-bottom * -0.5'))
233
+ Apache Arrowフォーマットにすると高速化!
234
+
235
+ # image
236
+ # src = images/apache-arrow-and-data-interchange.svg
237
+ # relative-height = 100
238
+
239
+ = 利用事例:Apache Spark
240
+
241
+ # image
242
+ # src = images/apache-arrow-and-apache-spark.svg
243
+ # relative-height = 100
244
+
245
+ == スライドプロパティー
246
+
247
+ : enable-title-on-image
248
+ false
249
+
250
+ = 利用事例:Amazon Athena
251
+
252
+ # image
253
+ # src = images/apache-arrow-and-amazon-athena.svg
254
+ # relative-height = 100
255
+
256
+ == スライドプロパティー
257
+
258
+ : enable-title-on-image
259
+ false
260
+
261
+ = どうして速いの?
262
+
263
+ * シリアライズコストが低い
264
+ * すぐに送れるようになる
265
+ * デシリアライズコストが低い
266
+ * 受け取ったデータをすぐに使えるようになる
267
+
268
+ = シリアライズ処理
269
+
270
+ (1) メタデータを用意
271
+ (2) メタデータ+元データそのものを送信
272
+ * 元データを加工しないから速い!
273
+ * なにもしないのが最速!
274
+
275
+ = 元データを加工する例:JSON
276
+
277
+ 0x01 0x02(8bit数値の配列)
278
+
279
+ "[1,2]"(JSON)
280
+ 0x01→0x49(数値→ASCIIの文字:'1')
281
+ 0x02→0x50(数値→ASCIIの文字:'2')
282
+
283
+ = 元データそのものを使うと…
284
+
285
+ * 変換処理にCPUを使わなくてよい
286
+ * 速い
287
+ * 変換後のデータ用のメモリー確保ゼロ
288
+ * 大きなメモリー確保はコストが高い
289
+ * 一定の作業領域を使い回すとかしなくてよい
290
+ * 速い
291
+
292
+ = デシリアライズ処理
293
+
294
+ (1) メタデータをパース
295
+ (2) メタデータを基に元データを取り出す
296
+ * 元データをそのまま使えるから速い!
297
+ * なにもしないのが最速!
298
+
299
+ = 元データを元に戻す例:JSON
300
+
301
+ "[1,2]"(JSON)
302
+
303
+ 0x01 0x02(8bit数値の配列)
304
+ 0x49→0x01(ASCIIの文字:'1'→数値)
305
+ 0x50→0x02(ASCIIの文字:'2'→数値)
306
+
307
+ = 元データを取り出せると…
308
+
309
+ * 変換処理にCPUを使わなくてよい
310
+ * 速い
311
+ * 変換後のデータ用のメモリー確保ゼロ
312
+ * すでにあるデータをそのまま使うのでゼロコピー
313
+ * 速い
314
+ * メモリーマップで直接データを使える
315
+ * ディスク上のメモリー以上のデータを扱える
316
+
317
+ = {,デ}シリアライズコスト
318
+
319
+ * Apache Arrowフォーマット
320
+ * ほぼメタデータのパースコストだけ
321
+ * それ以外の多くのフォーマット
322
+ * データ変換処理(CPU)
323
+ * 作業用メモリー確保処理(メモリー)
324
+
325
+ = データ交換が速い!
326
+
327
+ (('tag:center'))
328
+ (('tag:margin-bottom * -0.5'))
329
+ Apache Arrowフォーマットにすると高速化!
330
+
331
+ # image
332
+ # src = images/apache-arrow-and-data-interchange.svg
333
+ # relative-height = 100
334
+
335
+ = データサイズは?
336
+
337
+ * CPU・メモリーにやさしくて速いんだね!
338
+ * じゃあ、データサイズはどうなの?
339
+ * 大きいとネットワーク・IOがボトルネック
340
+ * 本来のデータ処理を最大限リソースを使いたい
341
+ * データ交換をボトルネックにしたくない
342
+
343
+ = データサイズ
344
+
345
+ * 別に小さくない
346
+ * 元データそのままなのでデータ量に応じて増加
347
+ * Zstandard・LZ4での圧縮をサポート
348
+ * ゼロコピーではなくなるがサイズは数分の1
349
+ * 圧縮・展開が必要→元データそのものを使えない
350
+ * CPU・メモリー負荷は上がるが\n
351
+ ネットワーク・IO負荷は下がる
352
+ * ネットワーク・IOがボトルネックになるなら効く
353
+
354
+ = 圧縮時のデータサイズと読み込み速度
355
+
356
+ # image
357
+ # src = https://ursalabs.org/20200414_file_sizes.png
358
+ # align = left
359
+ # vertical-align = top
360
+ # relative-width = 75
361
+
362
+ # image
363
+ # src = https://ursalabs.org/20200414_read_py.png
364
+ # align = right
365
+ # vertical-align = bottom
366
+ # relative-width = 75
367
+ # relative-clip-y = 12
368
+ # relative-margin-top = 12
369
+ # relative-margin-left = -3.8
370
+
371
+ (('tag:right'))
372
+ (('tag:margin-top * 15'))
373
+ (('note:((<URL:https://ursalabs.org/blog/2020-feather-v2/>))'))
374
+
375
+ == スライドプロパティー
376
+
377
+ : enable-clear-blue-slide-body-vertical-centering
378
+ false
379
+
380
+ : enable-title-on-image
381
+ false
382
+
383
+ = データ交換が速い!のまとめ
384
+
385
+ * {,デ}シリアライズが速い
386
+ * 元データをそのまま使うので処理が少ない
387
+ * CPU・メモリーにやさしい
388
+ * 圧縮もサポート
389
+ * ネットワーク・IOがボトルネックならこれ
390
+ * CPU・メモリー負荷は上がるが\n
391
+ データ交換のボトルネックを解消できるかも
392
+
393
+ = 交換したデータの扱い
394
+
395
+ * データ分析はデータ交換だけじゃない
396
+ * データ交換だけ速くしても基盤とは言えない
397
+ * データ処理も速くしないと!
398
+ * データ処理を速くするにはデータ構造が大事
399
+
400
+ = 高速処理のためのデータ構造
401
+
402
+ * 基本方針:
403
+ * 関連するデータを近くに置く
404
+ * 効果:
405
+ * CPUキャッシュミスを減らす
406
+ * SIMDを活用できる
407
+
408
+ = データ分析時の関連データ
409
+
410
+ * 分析時はカラムごとの処理が多い
411
+ * 集計・ソート・絞り込み…
412
+ * 同じカラムのデータを近くに置く
413
+ * カラムナーフォーマット
414
+
415
+ = カラムナーフォーマット
416
+
417
+ # img
418
+ # src = images/columnar.svg
419
+ # relative_height = 100
420
+
421
+ == スライドプロパティー
422
+
423
+ : enable-title-on-image
424
+ false
425
+
426
+ = 各カラムでのデータの配置
427
+
428
+ * 関連するデータを近くに置く
429
+ * 定数時間でアクセスできるように置く
430
+ * SIMDできるように置く
431
+ * アラインする\n
432
+ (('note:アライン:データの境界を64の倍数とかに揃える'))
433
+ * 条件分岐をなくす
434
+
435
+ = 真偽値・数値のデータの配置
436
+
437
+ 固定長データなので連続して配置
438
+ 32ビット整数:[1, 2, 3]
439
+ 0x01 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x03 ...
440
+
441
+ = 文字列・バイト列:データの配置
442
+
443
+ 実データバイト列+長さ配列に配置
444
+ UTF-8文字列:["Hello", "", "!"]
445
+ 実データバイト列:"Hello!"
446
+ 長さ配列:[0, 5, 5, 6]
447
+ i番目の長さ:長さ配列[i+1] - 長さ配列[i]
448
+ i番目のデータ:
449
+ 実データバイト列[長さ配列[i]..長さ配列[i+1]]
450
+ 注:長さ→データ→長さ→データ→…で置くと
451
+ 定数時間でi番目にアクセスできない
452
+
453
+ = nullと条件分岐
454
+
455
+ * null対応のアプローチ:
456
+ * null値:Julia: ((<(({missing}))|URL:https://docs.julialang.org/en/v1/manual/missing/>)), R: ((<(({NA}))|URL:https://cran.r-project.org/doc/manuals/r-release/R-lang.html#NA-handling>))
457
+ * 別途ビットマップを用意:Apache Arrow
458
+ * ビットマップを使うと条件分岐をなくせる
459
+
460
+ = nullと条件分岐とSIMD
461
+
462
+ # img
463
+ # src = images/simd-null.svg
464
+ # relative_height = 100
465
+
466
+ == スライドプロパティー
467
+
468
+ : enable-title-on-image
469
+ false
470
+
471
+ = nullと条件分岐とSIMD
472
+
473
+ # image
474
+ # src = https://wesmckinney.com/images/bitmaps_vs_sentinels.png
475
+ # relative-height = 90
476
+
477
+ (('tag:right'))
478
+ (('note:((<URL:https://wesmckinney.com/blog/bitmaps-vs-sentinel-values/>))'))
479
+
480
+ == スライドプロパティー
481
+
482
+ : enable-clear-blue-slide-body-vertical-centering
483
+ false
484
+
485
+ : enable-title-on-image
486
+ false
487
+
488
+ = 高速なデータ処理のまとめ
489
+
490
+ * 高速なデータ処理にはデータ構造が重要
491
+ * データ分析にはカラムナーフォマットが適切
492
+ * 定数時間でアクセス可能なデータの配置
493
+ * SIMDにやさしいデータの持ち方
494
+ * アライン・null用のビットマップ
495
+
496
+ = まとめ:Apache Arrowフォーマット
497
+
498
+ * Apache Arrowフォーマット
499
+ * 通信用・インメモリー用のデータフォーマット
500
+ * 表形式のデータ用
501
+ * Apache Arrowフォーマットは速い
502
+ * データ((*交換*))が速い
503
+ * データ((*処理*))が速い
504
+ * データ交換してすぐに高速処理できるフォーマット
505
+
506
+ = まとめ:なぜデータ交換が速いのか
507
+
508
+ * 元データをそのままやりとりできるから
509
+ * {,デ}シリアライズコストが低い
510
+ * CPU・メモリーにやさしい
511
+ * ネットワーク・IOの負荷を下げたい
512
+ * Zstandard・LZ4による圧縮
513
+ * CPU・メモリー負荷は上がるが\n
514
+ ネットワーク・IO負荷は下がる
515
+
516
+ = まとめ:なぜデータ処理が速いのか
517
+
518
+ * 最適化されたデータ構造
519
+ * カラムナーフォーマット
520
+ * SIMDを使えるデータの持ち方
521
+ * 最適化された実装
522
+ * 今回は紹介していない!!!
523
+ * pandas 2.0.0はこれを使って高速になるよ!
524
+
525
+ = Red Arrow
526
+
527
+ * Apache ArrowのRubyバインディング
528
+ * Apache Arrowの機能をRubyらしいAPIで
529
+ * red-parquet/red-adbcなど別gemに分離した機能も
530
+ * 既存gemのApache Arrow対応は別gemで
531
+ * red-arrow-activerecord: Active Recordのクエリー結果をRed Arrowオブジェクトに変換
532
+ * red-arrow-duckdb: DuckDBの入出力をRed Arrowオブジェクトで
533
+
534
+ = あなたとRed Arrow
535
+
536
+ * よく使うだろう機能:
537
+ * (({Arrow::Table.load(path)})):いい感じに読み込む
538
+ * (({Arrow::Table#save(path)})): いい感じに書き出す
539
+ * 開発に参加!は難しそう
540
+ * 使用技術:C++/GObject Introspection/Ruby(('note:(少し)'))
541
+
542
+ = Red Data Tools
543
+
544
+ Rubyでデータ処理\n
545
+ できるように\n
546
+ するための\n
547
+ プロジェクト
548
+
549
+ = Red Data Toolsプロダクツ
550
+
551
+ * Red Arrow
552
+ * Charty:可視化
553
+ * Red Datasets:データセット
554
+ * RedAmber:データフレーム
555
+ * ...
556
+
557
+ = あなたとRed Data Tools
558
+
559
+ * 使う
560
+ * 開発に参加する
561
+ * 4. 現時点での知識不足は問題ではない
562
+ * 6. 楽しくやろう!
563
+ * チャットにおいで!
564
+ * ((<URL:https://gitter.im/red-data-tools/ja>))
565
+
566
+ = あなたとRed Data Toolsプロダクツ
567
+
568
+ * Red Arrow:難しそう
569
+ * Charty:いけるかも?
570
+ * Red Datasets:よさそう
571
+ * RedAmber:よさそう
572
+ * ...(('note:(チャットでよさそうなプロダクトを一緒に考えるよ!)'))...
data/config.yaml ADDED
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: davis-2023
3
+ base_name: arrow-and-red-data-tools
4
+ tags:
5
+ - rabbit
6
+ - arrow
7
+ - red_data_tools
8
+ presentation_date: 2023-03-29
9
+ version: 2023.3.29.0
10
+ licenses:
11
+ - CC-BY-SA-4.0
12
+ slideshare_id:
13
+ speaker_deck_id:
14
+ vimeo_id:
15
+ youtube_id:
16
+ width: 1920
17
+ height: 1080
18
+ source_code_uri: https://gitlab.com/ktou/rabbit-slide-kou-davis-2023
19
+ author:
20
+ markup_language: :rd
21
+ name: 須藤功平
22
+ email: kou@clear-code.com
23
+ rubygems_user: kou
24
+ slideshare_user: kou
25
+ speaker_deck_user: