我有一个真正简单的齐柏林飞船笔记本,有三段-基于齐柏林飞船演示笔记本,但唯一的区别是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)…
齐柏林飞船的演示效果很好。我在我的沙盒上运行这个,它使用了为hadoop2.6(spark-1.5.2-bin-hadoop26.tgz)和齐柏林飞船0.5.5构建的spark 1.5.2——同样是一个二进制齐柏林飞船0.5
我怀疑这与SqlContext有关——因为我相信Zeppelin注入了它自己的SqlContext。
有什么建议吗?感觉我错过了一些很简单的东西。
我已经找到了这个问题的解决方案。齐柏林飞船中有一个错误,我需要复制并发送给团队。似乎,如果你是齐柏林飞船的一个傻瓜(像我一样!),并创建自己的sqlContext,你就有效地破坏了笔记本——直到你重新启动内核,所有的表都会在错误的上下文中注册,并且随后的段落中没有表。重新启动内核解决了问题。