Apache Zeppelin は、対話型 GUI で Scala や Apache Spark を実行・結果確認できるツールで、Python の Jupyter Notebook みたいなやつ。
インストール
$ git clone git@github.com:apache/zeppelin.git
$ cd zeppelin
$ mvn clean package -Pscala-2.11 -Pspark-2.1 -DskipTests
Zeppelin 起動
$ ./bin/zeppelin-daemon.sh start
http://localhost:8080
で Zeppelin サーバーにアクセスできる。
ちなみに停止は zeppelin-daemon.sh stop
動かしてみる
Zeppelinを使って実行環境付きドキュメントを作った話 | Scala Tech Blog を参考に動かしてみる。
iris.csv
というのは Pandas のテストで使われている CSV っぽい。
https://github.com/pandas-dev/pandas/blob/master/pandas/tests/data/iris.csv をダウンロードしておく。
CSV を読み込んでテンポラリテーブルを作成
%spark
import org.apache.spark.sql.types.{
StructType,
StructField,
StringType,
FloatType
}
import org.apache.spark.sql.Row
// スキーマ情報
val customSchema = StructType(Seq(
StructField("sepalLength", FloatType, true),
StructField("sepalWidth", FloatType, true),
StructField("petalLength", FloatType, true),
StructField("petalWidth", FloatType, true),
StructField("species", StringType, true)
))
// データフレームで取得
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.schema(customSchema)
.load("/tmp/iris.csv")
// SparkSQL用にテーブルを作成
df.registerTempTable("iris")
// データを抽出してみる
val dfIris = sqlContext.sql("SELECT * FROM iris")
dfIris.show()
グラフィカルに表示
%spark.sql
SELECT * FROM iris
変数埋め込み
%spark.sql
SELECT * FROM iris WHERE ("${sepalLengthMin}" <= sepalLength) AND (sepalLength < "${sepalLengthMax}")
選択肢
%spark.sql
SELECT * FROM iris WHERE species = "${species=setosa,Iris-setosa|Iris-versicolor|Iris-virginica}"
CSV を読み込んで DataSet に変換
%spark
val df = spark.read.option("header", true).csv("/tmp/iris.csv")
df.show()