Spark 1.5.0の多層パーセプトロンのサンプルコードを試す(Mac)

Multilayer perceptron classifier - ML - Spark 1.5.1 Documentation

Mac環境 + IntelliJ で挑戦。

~/IdeaProjects/
に spark150
という名前のディレクトリを作成。

~/IdeaProjects/spark150/src/main/scala/ に
MultiLayerPerceptron.scala
を作成。上記URLのソースコードをコピペ。

~/IdeaProjects/spark150/build.sbt
に、

name := "MultiLayerPerceptronProject"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.0"

libraryDependencies += "org.apache.spark" %% "spark-mllib" % "1.5.0"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.5.0"

と書く。

~/IdeaProjects/spark150/
で、
sbt gen-idea
というコマンドを実行。
処理のログが大量に出た。
Spark 1.5.0のjarがダウンロードされたっぽい。

[info] downloading https://repo1.maven.org/maven2/org/apache/spark/spark-core_2.10/1.5.0/spark-core_2.10-1.5.0.jar ...
[info]  [SUCCESSFUL ] org.apache.spark#spark-core_2.10;1.5.0!spark-core_2.10.jar (3157ms)

エラーが出たけど、javadocがダウンロードできなかっただけ・・?

[warn]   [FAILED     ] org.jboss.netty#netty;3.2.2.Final!netty.jar(doc):  (0ms)
IntelliJで開く

IntelliJで、
~/IdeaProjects/spark150/ ] を選択して開いたら、プロジェクトファイルが古いので変換しますか?的なメッセージが出た。
なんか、ちゃんとしたプロジェクトとして開いていない。。

IntelliJのメニューバー
File > New > Project from Existing Sources...
~/IdeaProjects/spark150/
を開く。
ダイアログでsbtを選択。

※最初に試した時は、
Cannot resolve symbol ml
というエラーがでた。
build.sbt

libraryDependencies += "org.apache.spark" %% "spark-mllib" % "1.5.0"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.5.0"

を足したら、sbtは動いた。

Run Configuration

Name: MultiLayerPerceptron
Program aruguments:
local[*] src/main/scala/MultiLayerPerceptron.scala

.toDf()が無いというエラー。

Error:(17, 99) value toDF is not a member of org.apache.spark.rdd.RDD[org.apache.spark.mllib.regression.LabeledPoint]
    val data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_multiclass_classification_data.txt").toDF()

value toDF is not a member of org.apache.spark.rdd.RDD | Active Intelligence
に書かれているコードを追加したら動いた。

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.ml.classification.MultilayerPerceptronClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.sql.Row
import org.apache.spark.sql.SQLContext // 追加1


object MultiLayerPerceptron {
  def main(args: Array[String]) {

    val conf = new SparkConf().setAppName("MultiLayerPerceptron").setMaster(args(0))
    val sc = new SparkContext(conf)

    // 追加2
    val sqlContext = new SQLContext(sc)
    import sqlContext.implicits._

    // Load training data
    // 以下省略

結果は、長いログが表示された後、
scala-shellで試したときと同じ、

15/09/29 16:53:48 INFO DAGScheduler: Job 94 finished: countByValue at MulticlassMetrics.scala:45, took 0.031202 s   
Precision:0.9636363636363636

だった。