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

『初めてのSpark』を読み始めた (2)

次はスタンドアローンアプリケーションの構築.

下記の GitHub リポジトリで色々練習する予定.

https://github.com/qwerqwer1111/spark-example

作業内容

SBT のビルドファイルに dependency を追加.

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "1.6.0" % "provided"
)

実際のアプリケーションは下記のような感じ.

package com.github.qwerqwer1111.spark

import org.apache.spark.{SparkContext, SparkConf}

object WordCount {

  def main(args: Array[String]) {
    if (args.length != 2) sys.exit(-1)

    val inputFile = args(0)
    val outputFile = args(1)

    val conf = new SparkConf().setAppName("WordCount")
    val sc = new SparkContext(conf)

    val input = sc.textFile(inputFile)

    val words = input.flatMap(line => line.split(" "))
    val counts = words.map(word => (word, 1))
      .reduceByKey(_ + _)

    counts.saveAsTextFile(outputFile)
  }
}

ビルド. 実際は IntelliJ IDEA 上から実行した.

$ sbt clean package

spark-submitで実行.

$ spark-submit \
  --class com.github.qwerqwer1111.spark.WordCount \
  target/scala-2.11/spark-example_2.11-1.0.jar \
  /usr/local/Cellar/apache-spark/1.6.0/README.md \
  ./wordcounts

wordcountsディレクトリの下に_SUCCESS, part-xxxxxのようなファイルが出力された. part-xxxxxの中身は下記のような感じ.

(For,2)
(Programs,1)
(Spark,13)
(particular,2)
(The,1)
...

追記

2016/04/16 追記

Spark 1.3.0 では import org.apache.spark.SparkContext._ の明示的なインポートが必要だったが, 現在は必要ないらしい.