我有一个真正简单的 Zeppelin 笔记本,包含三个段落 - 基于 Zeppelin-Demo 笔记本,但唯一的区别是 bankText RDD 是使用 textFile 方法创建的。
第 1 段:
%sh
wget http://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip
unzip bank.zip
第 2 段:
val bankText = sc.textFile("bank.zip")
case class BankRow(age: Integer, job: String, marital: String, education: String, balance: Integer)
val bank2 = bankText.map(s => s.split(";")).filter(s => s(0) != "\"age\"").map(
s => BankRow(s(0).toInt,
s(1).replaceAll("\"", ""),
s(2).replaceAll("\"", ""),
s(3).replaceAll("\"", ""),
s(5).replaceAll("\"", "").toInt
)
).toDF()
bank2.registerTempTable("bank2”)
第 3 段:
%sql
select age, count(1) value
from bank2
where age < 30
group by age
order by age
第 1 段和第 2 段运行良好 - 但第三段错误:
org.apache.spark.sql.AnalysisException: no such table bank2; line 2 pos 5 at
org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42) at
org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.getTable(Analyzer.scala:260) at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$7.applyOrElse(Analyzer.scala:268) at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$7.applyOrElse(Analyzer.scala:264) at
org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators$1.apply(LogicalPlan.scala:57) at
org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators$1.apply(LogicalPlan.scala:57)…
Zeppelin 演示运行良好。我在我的沙箱上运行它,它使用为 Hadoop 2.6 (spark-1.5.2-bin-hadoop2.6.tgz) 和 Zeppelin 0.5.5 构建的 spark 1.5.2 - 再次是二进制 zeppelin-0.5.5-incubating-bin -all.tgz。
我怀疑这与 SqlContext 有关——因为我相信 Zeppelin 注入了它自己的 SqlContext。
有小费吗?感觉就像我错过了一些非常简单的东西。