きちんと知りたいApache Spark ~ 機械学習とさまざまな機能群
スピーカー:株式会社リクルートテクノロジーズ アドバンスドテクノロジーラボ ソフトウェアエンジニア 石川 有氏
近年、大規模データの分散処理システム「Apache Spark(以下、Spark)」が注目を浴びてきている。Sparkには機械学習ライブラリがあるため、機械学習の分野でも可能性を秘めている。このセッションでは、Spark機械学習ライブラリ関連の開発に携わっている石川氏が、企業での同機能の導入に関して解説した。
![株式会社リクルートテクノロジーズ アドバンスドテクノロジーラボ ソフトウェアエンジニア 石川 有氏](http://cz-cdn.shoeisha.jp/static/images/article/9125/ishikawa.jpg)
そもそもSparkとは、大規模データのための分散処理システムだ。先行してMapReduceなどの分散処理機能を提供してきたApache Hadoop(以下、Hadoop)などの後継プロダクトと目されている。主に企業におけるデータ分析の基盤として用いられており、標準でストリーミング、機械学習、グラフ処理のコンポーネントを備えているのも特徴だ。
オープンソースソフトウェアとして開発されており、およそ3か月に1度のペースで新バージョンがリリースされる。現状の安定稼働バージョンは1.5だ。利用するプログラムはScala、Java、Python、Rで記述されることが多いという。現時点でサポートしているデータソースとしては、ビルトインではHadoopなどのHDFS、クラウドサービスのAmazon S3、RDBのMySQLやPostgreSQLなど。ほかにも外部ではApache HBase、Amazon Redshift、Cassandra、CSVなどもサポートしている。
石川氏が開発に参画しているのは、Sparkの機械学習ライブラリ「MLlib」である。ビジネス面でMLlibに期待される機能の一つは、「協調フィルタリング」だろう。協調フィルタリングとは、リコメンデーション(顧客にお勧め商品などを提示するなど)の実現に用いられる手法の一つである。MLlibは協調フィルタリングのために「ALS(Alternative Least Squares:交互最小二乗法)」を使っている。MLlibでは、まずデータをロードし、次にALSのオブジェクトを作成して訓練し(Train Model)、そして評価を行う。この評価の結果によって、リコメンド(推薦)すべき商品などが0~1の数値で提示される。
![ALSの最も単純な実行方法](http://cz-cdn.shoeisha.jp/static/images/article/9125/ALS.png)
一見すると扱うのが難しそうであるが、石川氏は「トップレベルAPIがよくデザインされているので、簡単に機械学習ライブラリが使えます」と話し、利用のハードルが意外に低いことを会場の参加者にアピールした。
Sparkには、MLlibのほかにもDataFrame APIとPipelie APIなどのコンポーネントがある。DataFrame APIははデータ操作を行うためのコンポーネントで、日付関数や数学関数、文字列関数などを標準サポートし、SQLでも処理を記述できる。驚きなのがその性能。石川氏によれば「DataFrame APIを用いれば少ないコードでかつ高速にデータを処理できる。性能はネイティブで単純に記述したときを上回る」という。
![ALSのベンチマーク](http://cz-cdn.shoeisha.jp/static/images/article/9125/spec.png)
一方、Pipeline APIは「実装面で考えれば、MLlibやDataFrameの上位に位置するもの」(石川氏)。例えば「レビューのテキストから評価を予測する」という処理をPipeline APIで行うと、途中でパラメータチューニングやクロスバリデーションなどがあるものの、APIという形で提供されるため複雑化を避けることができる。
すでに様々な言語に対応しているSparkではあるが、石川氏は「機能面と開発速度の観点から使用言語はScalaがおすすめ」と話す。次の候補としてPython、SparkRがあるが、Spark StreamingではScalaしかサポートしていない機能があり、SparkRのML APIはまだ開発途上なのだそうだ。
石川氏によると「Sparkのデータサイエンス機能は企業における実践を意識して作られています」という。先述したようなAPIなどを駆使すれば処理や管理が容易になる。そして最後に、石川氏はセッションを「Happy Spark ML Life!」と結んで、ステージを後にした。