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 +7 -0
- data/.rabbit +2 -0
- data/README.rd +44 -0
- data/Rakefile +17 -0
- data/arrow-and-red-data-tools.rab +572 -0
- data/config.yaml +25 -0
- data/images/apache-arrow-and-amazon-athena.svg +1846 -0
- data/images/apache-arrow-and-apache-spark.svg +1306 -0
- data/images/apache-arrow-and-data-interchange.svg +833 -0
- data/images/apache-spark-improvement.svg +58 -0
- data/images/columnar.svg +641 -0
- data/images/simd-null.svg +285 -0
- data/pdf/davis-2023-arrow-and-red-data-tools.pdf +0 -0
- metadata +84 -0
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
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:
|