株式会社クリアコード > ククログ

ククログ


名古屋Ruby会議03:Apache ArrowのRubyバインディング(1) #nagoyark03

2017年2月11日に名古屋Ruby会議03が開催されます。そこで「Apache ArrowのRubyバインディングをGObject Introspectionで」という話をする予定です。

名古屋Ruby会議03とApache ArrowとGObject IntrospectionとRubyバインディングの宣伝も兼ねて関連情報をまとめていきます。

まずは、Apache Arrowについて簡単に紹介します。

Apache Arrowとは

Apache Arrowはインメモリーで高速にデータ分析をするためのデータフォーマットの仕様(たぶん)とその実装です。

Apache Arrowが開発されている目的は高速にデータ分析をすることです。そのために以下のことを大事にしています。

  • データ分析プロダクト間でのデータ交換コストを下げる
  • 複数のCPUコアを使って高速にデータ分析処理をできる

それぞれ少し補足します。

まず、データ交換コストについてです。

現在、データ分析用のプロダクトにはApache HBaseApache SparkPandasなどがあり、それらが協調してデータ分析をしています。協調するためには、それらのプロダクト間で分析対象のデータを交換する必要があります。現在は各プロダクトでそれぞれ別のデータフォーマットを使っているので、交換するときにはフォーマットを変換する必要があります。

この状況の課題は次の通りです。

  • 変換コストがムダ(Apache Arrowのサイトには70-80%のCPUが変換のために使われていると書いている)
  • それぞれのフォーマット毎に似たような処理が実装されている

Apache Arrowのように各プロダクトで共通で使えるデータフォーマットがあると変換は必要なくなりますし、そのデータに対する処理も同じ実装を共有できます。これがApache Arrowが解決しようとしているやり方です。Apache Arrowのサイトの「Advantages of a Common Data Layer」のところにこの状況のイメージがあるので、ピンとこない人はApache Arrowのサイトも見てみてください。

次に、複数のCPUコアの話です。

現在は1つのマシンで複数のCPUコアを利用できることは当たり前です。同時に複数のCPUコアを有効活用できれば処理速度を向上させることができ、より速くより多くのデータ分析処理を実現できます。

Apache Arrowはカラムベースのデータフォーマットを活用することによりこれを実現します。Apache Arrowのデータフォーマットを各プロダクトで共通に使えれば、この高速な処理も各プロダクトで共有できます。これがApache Arrowが実現しようとしていることです。これについてもApache Arrowのサイトの「Performance Advantage of Columnar In-Memory」のところにイメージがあるので、参照してください。

なお、Apache Arrowに賛同しているデータ分析プロダクトは現時点で13個あります。各プロダクトがApache Arrowを使う未来がきそうな気がしますね。プロダクトの詳細はApache Arrowのサイトを確認してください。

まとめ

名古屋Ruby会議03で話す内容の関連情報をまとめはじめました。

今回はApache Arrowの話だけでRubyのことは全然でてきませんでした。次はなぜApache ArrowのRubyバインディングがあるとよさそうなのかについて説明します。

タグ: Ruby
2017-01-16

«前の記事: mrubyの例外のバックトレースの実装 最新記事 次の記事: OSS Gate東京ミートアップ2017-01-16を開催 #oss_gate»
タグ:
年・日ごとに見る
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|