2

我有一个真正简单的 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。

有小费吗?感觉就像我错过了一些非常简单的东西。

4

1 回答 1

2

我已经找到了解决问题的办法。Zeppelin 中有一个错误,我需要复制并发送给团队。似乎如果您是 Zeppelin 的菜鸟(像我一样!)并创建自己的 sqlContext ,您实际上会破坏笔记本 - 直到您重新启动内核,所有表都在错误的上下文中注册,并且后续段落没有该表在范围内. 重新启动内核解决了这个问题。

于 2015-12-31T06:24:28.977 回答