のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Mac10.9 でApache-Sparkを動作させてみる(in Python)

Sponsored Links

分散処理で有名なApache-Sparkを初動作させてみる。

皆さんこんにちは
お元気ですか。腹減った。

分散処理のプラットフォームSparkを扱ってみます。

Apache Sparkとは

spark.apache.org

Apache Sparkは大きいデータを高速に処理する為のプラットフォームで
Hadoopの100倍速の速さ、様々なプラットフォームとの連携ができることが特徴ですね。

インストール

brew install apache-spark
インストール確認

pySparkと入力し、長い長いログの後に以下のログが出力されれば、インストールされていることを
確認することができます。

$bash pySpark
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 1.4.1
      /_/

Using Python version 2.7.10 (default, Jul 13 2015 12:18:59)

GUI

pySparkでSparkを立ち上げるとGUIで現在のタスクの状況やジョブ、環境設定を見ることができます。
以下のurlにアクセスすると見ることができます。

http://localhost:4040/jobs/

f:id:tereka:20150926225811p:plain

試しにプログラムを実行してみる。

Apache Spark チュートリアルを参考に作成した
プログラムです。配列の内容を合計して表示します。

配列を合計する。

from pyspark import SparkContext
from operator import add

sc = SparkContext()
a = sc.parallelize(xrange(1000000), 2)
print a.reduce(add)

Spark MLlibを使ってみる。

Sparkといえばデータ処理、そして機械学習を使ってみるイメージがあるのは
私だけでしょうか。大本命のSpark MLlibを扱ってみます。

Spark MLlibとは

Sparkの機構を用いて使える機械学習のライブラリです。
内容を大まかに分類すると、Classification,Regression,Recommendationなどがあります。

実際のサンプルコードを扱ってみます。テストは以下から取得してきました。

spark/sample_svm_data.txt at master · apache/spark · GitHub

from pyspark.mllib.classification import LogisticRegressionWithLBFGS, LogisticRegressionModel
from pyspark.mllib.regression import LabeledPoint
from pyspark import SparkContext

# テキストを解析する。
def parsePoint(line):
    values = [float(x) for x in line.split(' ')]
    return LabeledPoint(values[0], values[1:])

sc = SparkContext()
data = sc.textFile("./logistic_data.txt")
parsedData = data.map(parsePoint)

# モデルを構築する。
model = LogisticRegressionWithLBFGS.train(parsedData)

# トレーニング予測を算出する。
labelsAndPreds = parsedData.map(lambda p: (p.label, model.predict(p.features)))
trainErr = labelsAndPreds.filter(lambda (v, p): v != p).count() / float(parsedData.count())
print("Training Error = " + str(trainErr))

# モデルのセーブと読み込みを行う。
model.save(sc, "myModelPath")
sameModel = LogisticRegressionModel.load(sc, "myModelPath")

テキストの解析→機械学習→予測→モデルのsave→loadの流れを行っています。
modelについては、trainとpredictメソッドを使うことによって学習と予測をすることができます。

実際に使うには学習済みのモデルをセーブし、予測に使っていくのでしょうか。