読者です 読者をやめる 読者になる 読者になる

Screaming Loud

研究・プログラミングなど気づいたことをメモをしています

Hadoop Spark Conference Japan 2016 に参加したときのメモ

Hadoop Spark Conference Japan 2016に参加したので、その聞いた内容をまとめました。

Spark MLlib Now and Beyond

Spark自体はコントリビュータが多いプロダクト

sparkでは、2つのの機械学習ライブラリがある。

  • spark.mllib: RDDというデータフレームを利用
  • spark.ml: DataFrame, PipelineAPIを利用

spark.mlの利用を推奨
scikit-learnに影響

【データ構造】
  • RDD
  • DataFrameAPI

RDD
numpy.arrayのような配列の形式

【DataFrameAPI】
DataFrameAPI:RDBのように直感的にデータにアクセスできるAPI
pandasに影響を受けて作られている

サポートしているデータソースも豊富
jdbc, mysql, posqresql, hive

ビルトイン関数も豊富
Catalystによる処理最適化によって、生RDDよりDataFrameのほうが速い

【PipelineAPI】

処理をつなげられ、再利用もしやすい

tokenizer:単語のトークン化
hashingTF:単語のベクトル化
logisticRegression:ロジスティック回帰

上の3つの操作をpipelineでまとめることができる

pipelineを再利用することで簡単に使い回すことができる
例えば、入力をtrainDataとtestDataにしたり。

pipelineを使うと
クロスバリデーションも簡単にできる

そしてその作ったpipelineをs3やhdfsに永続化することもできる

pythonで分析して、scalaで読み込む
なんてこともできる

【Mllib2.0】
・GLMの改善
・永続化未対応ライブラリがまだある。それの改善。

SparkによるGISデータを題材として時系列データ

GISデータとは、船の航行データ(緯度、輝度、速度とか)
GISデータ、センサーデータ:多変量時系列データ
データの収集・蓄積はできているが、分析がまだまだ。

【要件】
性能、柔軟性、スケーラビリティが必要

【sparkを用いた時系列データ処理】

時間依存の情報
・時刻
・緯度、経度
時間非依存の情報
・移動体ID

やりたいこと
・移動体ごとにデータをソート
・時刻や座標の差分を計算
・numpyの関数をそのまま使えること

時系列データの評価ポイント

  1. レコード長の違い:長いほうが遅い(普通)
  2. レコードに偏りをもたせるか:ほぼ変わらない
  3. RDDかDataFrameか:DataFrameのほうが速い

RDD [“ships”, “0.0.0"]
DataFrame は表形式
ただ、DataFrameはメモリを使うので、そこら辺のチューニングが必要

flinkとかも出てきている。
pythonでできるところは、pythonで。

行、列指向の片方だけで閉じない

なんでpythonから移行したのか?→データ量が増えてきて、今後に対応できないと感じたから
sparkは1台で実行したのか?→並列で実行させている

sparkUIから確認することで、チューニングを行った。

時系列データにSparkを使うのは現実としてあり。

まだまだ、公式には足りない機能が多いので、spark packagesなどのパッケージ関連を検索してみるのも大事。

Hive on Sparkを活用した高速データ分析

CDHをいれていると、3clickでHive on Sparkが導入可能に。

www.slideshare.net