Spark 1.5.0の多層パーセプトロンのサンプルコードを試す(Mac)
Multilayer perceptron classifier - ML - Spark 1.5.1 Documentation
~/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
だった。