Zeppelin和SqlContext

时间:2015-12-30 19:41:17

标签: apache-spark apache-spark-sql apache-zeppelin

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

任何提示?感觉就像我错过了一些非常简单的东西。

1 个答案:

答案 0 :(得分:2)

我已经找到了问题的解决方案。 Zeppelin中有一个错误,我需要重现并发送给团队。似乎如果你是Zeppelin的菜鸟(像我一样!)并创建你自己的sqlContext你有效地打破笔记本 - 直到你重新启动内核所有表都在错误的上下文中注册,后续段落没有在范围内的表。重新启动内核解决了这个问题。