Apache Zeppelin を試す

2017/07/03   #Apache Zeppelin 
このエントリーをはてなブックマークに追加

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()

参考