Sparkの仕組み・導入メリット・インストール方法など

【目次】
・Sparkについて
・Sparkの歴史
・Sparkの仕組み
・データ分析におけるSpark導入のメリット
・Sparkの導入方法
・参考文献

Sparkについて

OSS(Open Source Software)のインメモリ処理の分散並列基盤
※インメモリ(メインメモリ上で処理するため、ディスクストレージを介するよりも高速かつ安定しているらしい。メモリに乗り切らないようなケースでも、ディスクを利用するなどしてアプリケーションが問題なく動作するように作られている。)
ビッグデータ活用を支えるプラットフォームとして注目されている。
比較の際はHadoopで言う所の、MapReduceが引き合いに出されます。MapReduceがバッチ処理に特化した仕組みになっているのに対して、Sparkはバッチ処理だけでなく、対話的な処理や繰り返し処理・ストリーミング処理といった多様なデータ処理のパターンに対応できる仕組みになっていることから、Sparkに注目が集まっています。

分散処理エンジンとして、Apache Spark Coreがあり、以下の様な機能が用意されているようです。

Spark SQL・・・SQL処理用
Spark Streaming・・・ストリーミング処理
MLib・・・機械学習処理用
 基本API
 ・統計情報の取得
 ・相関関係の算出
 ・層化抽出
 ・仮説検定
 ・ランダムデータ生成
 機械学習アルゴリズム
 ・分類回帰(SVM、ロジット、線形回帰、ナイーブベイズ、決定木、ランダムフォレスト、isotonic回帰)
 ・協調フィルタリング(ALS(Alternating Least Squares))
 ・クラスタリング(K平均法、混合ガウシアン、PIC、LDA、ストリーミングK平均法)
 ・次元削減(SVD、PCA)
 ・特徴抽出&変換(TF-IDF、Word2Vec、etc…)
 ・頻出パターンマイニング(FP-Groth、アソシエーションルール、PrefixSpan)
GraphX・・・グラフの処理
※機械学習の機能があるのは嬉しいですね。スクラッチで作るのはペインフルなので。

データソースとしては、HDFS(Hadoop Distributed File System)だけでなく、Hive、HBase、PodgreSQL、MySQL、CSVファイルなども対応している。

Sparkの歴史

2009年にUC BarkeleyのMatei Zaharia氏がScalaを用いて開発

Google Trendで検索トレンドを見たところ、2014年頃から今に至るまで伸び続けています。
GoogleTrend

Sparkの仕組み

RDD(Resilient Distributed Dataset)
不変で並列実行可能な分割されたコレクションのことを指します。
これによりユーザーが並列分散処理を意識しなくとも、それができる環境が提供されます。
こちらのRDDを
map,filter,union,flatMapなどのTransformations
で生み出し、RDDのデータを
reduce,countなどのActions
を実行することで動かします。
RDDを任意の時点でメモリやディスクに保存することもできるため、処理の再実行のみならず、同じデータを複数回利用するなど、複雑なデータ処理に関しても効率的に実行できます。
SparkはScalaという言語で書かれていますが、Python・Java・Rなどに対してAPIが提供されているので、幅広いユーザーが扱うことが可能です。しかしながら、痒いところに手を届かせるためには、Scalaの勉強は避けられないのかもしれません。実際のところ、大体のデータマイニング系エンジニアの知り合いはScalaの勉強などをしていた印象があります。

データ分析におけるSpark導入のメリット

・並列分散の手法を意識せずに大規模データの処理が可能になる。
・Rなどの苦手とする反復処理を高速化させることができる。
・データ取得、前処理、分析処理、レポーティングを一つのプラットフォームで実行できる。
・コマンドラインによるインタラクティブな試行錯誤がしやすいので、データ分析のタスクに向いている。(PythonやRのように)

※レコメンドエンジンとしてSparkを用いるケースも観察されているようです。
 Yahoo!台湾

Sparkの導入方法

ここでの導入はあくまでもプログラミングを学ぶためであって、ローカル環境での実行環境の構築ではSparkのメリットを感じることはできません。
※SparkはJava仮想マシン上で動作するため、事前にOracle JDKをインストールしておきましょう。
Java SE Development Kit 8 Downloads

■Windowsの場合
Apache Sparkで始めるお手軽リアルタイムウインドウ集計
こちらで手順が詳しく書かれています。

■Macの場合
Macの方が導入はシンプルです。
Download Spark
からダウンロードします。(SparkRはSparkのver1.4以降からサポートされているそうです。)
HOW TO INSTALL APACHE SPARK ON MAC OS X YOSEMITE
Apache Spark 1.6.0 setup on Mac OS X Yosemite
そこで、

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

を実行すればコンパイルできるようです。(10分ほどかかる。私は30分もかかったが。。)

そのあと、パスを通します。
PATH=/usr/local/share/spark/bin:$PATH; export PATH

それから、pythonでsparkを動かしてみます。
pyspark

を実行して、試しにReadmeのテキスト行数をカウントさせるコマンドを入力します。これは、textFileメソッドを用いて、Readmeファイルを読み込み、linesという名前のRDDを生成していることを意味します。
lines = sc.textFile(“/usr/local/share/spark/README.md”)

そして、このコマンドで値が返されたら、うまく動いていることが確認できるでしょう。
print lines.count()

加えて、ワードカウントを行うコマンドを入力します。(スペース区切りで分解し、mapメソッドで(単語, 1)という組み合わせに変換したあと、最終的にreduceByKeyで同一の単語を足し上げるという処理をしています。)

counts = lines.flatMap(lambda line: line.split(” “)) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)

そして、これで結果を取得します。
counts.collect()

スクリーンショット 2016-05-02 12.21.50

参考文献

Spark を活用する:ビッグデータアプリケーション用の高速インメモリコンピューティング

Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)

詳解 Apache Spark

[Apache Spark]RDDについて簡単にまとめてみた

Rユーザのためのspark入門

Spark 1.4.0 の SparkR を動かす

Spark Examples

多腕バンディットモデルに関する参考文献

多腕バンディットモデルについて調べた際の文献です。

バンディットアルゴリズム入門と実践

目的
・限られた施行回数の中で、最も良い選択をすること。
背景
・大体のことはやってみないとわからない。
・何度繰り返しても100%正しく知ることはできない。
解説
・探索(Explore)→不確実だが行ったことのない店に行ってみる。
・活用(Exploit)→実績ある行きつけの店に行く。
・探索と活用のトレードオフ
・選択肢(アーム)
・引く
 アームを選択して結果を得ること
・探索
 アームに関する情報を増やすためいアームを引くこと
・活用
 今持っている情報から最も良いアームと判断できるアームを引くこと
・epsilon-greedy
 探索と活用を確率的に行う
・epsilon-first
 ある一定期間完全に探索を行い、その後の期間は活用のみを行う
・softmax
 当たる確率の高いアームを高い確率、当たる確率の低いアームを低い確率で引くことで、探索と活用を行う
・Upper Confidence Bounds(UCB)
 アームについてどれだけ知っているかの情報を考慮に入れてアームを選択、知らないアームについて積極的に探索
・Bayes
 ベイズ確率を計算して、良いアームの確率が最も高いアームを引く
・ユーザーのクラスタに応じて、バンディットアルゴリズムで施策を打てば、one to oneマーケティングに近づけるかも

バンディットアルゴリズムによる最適化手法
https://www.oreilly.co.jp/books/9784873116273/

johnmyleswhite/BanditsBook

バンディットアルゴリズムによる最適化手法 4章
http://hagino3000.blogspot.jp/2014/05/banditalgo4.html

A/Bテストよりすごい?バンディットアルゴリズムとは一体何者か
http://qiita.com/yuku_t/items/6844aac6008911401b19

Bayesian Bandits – optimizing click throughs with statistics
https://www.chrisstucchio.com/blog/2013/bayesian_bandit.html

Beta-distribution Bandit
https://gist.github.com/stucchio/5383015#file-beta_bandit_test-py

雑談
先日、強化学習に明るい方の話を伺ったのですが、A/Bテストはどちらが良いかノウハウが溜まる観点からすると、良い試みなので、多腕バンディットと単純比較するのはあまりしないとおっしゃられていました。それでもやはり、最終的に良い方に表示がされるようになるはずなので、無駄の多いA/Bテストよりも、強化学習を使ってサイトとしての収益を重視した方がいいのだろうという話で落ち着きました。
アイテム数が多い場合は強化学習も大変だと思いますが、2つのクリエイティブの出し分けとかならカジュアルに実装できそうですね。

状態空間モデルに関する参考文献

  • 実行環境
  • 状態空間モデルの実行方法と実行環境の比較

  • 研究事例
  • 状態空間モデルによる広告効果分析

    状態空間モデルによる広告効果分析

    状態空間モデルによる飲食店日次売上の要因分解
    http://www.ism.ac.jp/~tsuchiya/sympo/shukai03/shukai03-papers/Yamaguchi_OPT04.pdf

    ロジスティック回帰分析に関する参考文献

    ロジスティック回帰分析に関する参考文献を載せています。
    限界効果についてや、多項ロジットなどについての文献もあります。

  • Rのパッケージ
  • Package ‘mfx’
    http://cran.r-project.org/web/packages/mfx/mfx.pdf
    限界効果を計算できるmfxパッケージ。

    Package ‘mlogit’
    http://cran.r-project.org/web/packages/mlogit/mlogit.pdf
    多項ロジットを計算できる。

  • 実行例
  • R Data Analysis Examples: Logit Regression
    http://www.ats.ucla.edu/stat/r/dae/logit.htm

    R Data Analysis Examples: Multinomial Logistic Regression
    http://www.ats.ucla.edu/stat/r/dae/mlogit.htm