追記(2018/07/18):
すみません、Twitter上でいろいろ間違えている部分をご指摘いただきました(ありがとうございました)。
- コピーしなくても計算はできる
- ただし結果をメモリ上に上書きすることはできない
- GandivaはArrowにマージされのを目指している
- 速い言語は、コア部分もC++ではなくそれぞれの言語で実装されている
詳しくはこのツイートへのリプライを参照してください。
そういえば半年前にこれ↓をLTして以来、ちょっと状況がアップデートされているのでいったんまとめておきます。
というのは、SciPy 2018でWes McKinney氏が話してたこのスピーチがけっこうまとまっててわかりやすかったので。
Apache Arrowとは?
まずはおさらい。ここは↑のスライドと変わっていません。
- メモリ上のデータ形式を定めたもの(ディスクに保存するデータ形式(例:Parquet、ORC)の話ではない)
- 複数のプロセスがデータコピーなしに同じデータを共有できる(共有メモリを使う)
- 特定のプログラミング言語に依存しない実装(具体的にはC++)
「メモリ上のデータ形式」という点は重要なので押さえておきましょう。以下がわかりやすいです(と言うほど私は理解してないですけど...)。
Rのサポート
↑のスライドをつくった時点ではRのサポートができる気配はまったくなかったんですが、その後、dplyrの開発をメインに進めていたRomain François氏が手を挙げました。 開発はとりあえず↓のPRで進んでいて、これがマージされれば、とりあえずRからもArrowのデータが読み書きできるようになるはずです。
ただ、いつマージされるかは謎...
Ursa Labs
Apache Arrowのように色んなものをゼロからつくりなおすというプロジェクトには、かなりの開発リソースが必要になります。 そのためにWesとHadleyが立ち上げたのがUrsa Labsです。RStudio社とTwo-sigma社がスポンサーとして後ろに付いていて、 フルタイムの開発者を雇ってデータサイエンスのためのOSSプロダクトの開発を引っ張っていく組織です。
Wesのブログ: Announcing Ursa Labs: an innovation lab for open source data science - Wes McKinney RStudioのブログ: Arrow and beyond: Collaborating on next generation tools for open source data science | RStudio Blog
英語つらい、という人は日本語訳があるのでこれを読んでおくといいでしょう。
Ursa Labsは当面はApache Arrowの開発に集中するようですが、そのミッションはApache Arrowに閉じたものではありません。 「Ursa Labs Technology」のページを見ると、Apache Arrow周辺の技術がまとまっていてわかりやすいです。
計算をどこでやるのか
Apache Arrowのウェブサイトで「Specification」というところをクリックすると、以下の3つの項目が含まれています。
これを見ればわかるように、今のところ、
までがApache Arrowでできることです。
現状、このデータを使って計算しようとすれば、PythonなりRなりに読み込んで計算して、その結果を書き込むしかありません。 つまり、計算しようと思うと結局データをコピーせざるをえないのです。
繰り返しますが、これはあくまで現状の話です。計算することも当然Apache Arrowのスコープに入っています。 このへんは↓のスライドの12枚目の図がわかりやすかったです。
Ursa Labsの「Arrow-native Computation Engine」というあたりにも情報がまとまっているので読んでみましょう。 GPUで計算できるようにする、みたいな話もあって未来は明るいです。でもたぶん開発にめっちゃ時間かかりそう...
この辺は、実質Dremioが引っ張っている感じのようです。 まったく議論を追っていないので、dremio/gandivaがArrowに取り込まれるのか、 Arrowが独自に別のものをつくるのかはよくわかりません(教えて詳しい人...)
DremioとArrowの関係については以下のスライドが参考になるようなならないような。
感想
ゼロコピーとか言ってるけど計算どうやるんだろう??とずっと思ってたんですが、 やっぱりちゃんとArrowがその辺もやる計画だとわかってほっとしました。 しかし、壮大すぎて完成しないのでは...。
(あんまり分かってないので詳しい人ぜひツッコミをください)