飞艇和 SqlContext
Zeppelin and SqlContext
我有一个非常简单的 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.applyOrElse(Analyzer.scala:268) at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply.applyOrElse(Analyzer.scala:264) at
org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators.apply(LogicalPlan.scala:57) at
org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators.apply(LogicalPlan.scala:57)…
Zeppelin 演示运行良好。我在我的沙箱上 运行ning 这个,它使用为 Hadoop 2.6 (spark-1.5.2-bin-hadoop2.6.tgz) 构建的 spark 1.5.2 和 Zeppelin 0.5.5 – 又是一个二进制 zeppelin- 0.5.5-孵化箱-all.tgz.
我怀疑这与 SqlContext 有关——因为我相信 Zeppelin 注入了它自己的 SqlContext。
有什么建议吗?感觉好像我错过了一些非常简单的东西。
我找到了解决问题的方法。 Zeppelin 中有一个错误,我需要重现并发送给团队。似乎如果你是 Zeppelin 的菜鸟(像我一样!)并创建你自己的 sqlContext 你会有效地破坏笔记本 - 直到你重新启动内核所有 tables 都在错误的上下文中注册并且后续段落不会在范围内有 table。重新启动内核解决了问题。
我有一个非常简单的 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.applyOrElse(Analyzer.scala:268) at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply.applyOrElse(Analyzer.scala:264) at
org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators.apply(LogicalPlan.scala:57) at
org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators.apply(LogicalPlan.scala:57)…
Zeppelin 演示运行良好。我在我的沙箱上 运行ning 这个,它使用为 Hadoop 2.6 (spark-1.5.2-bin-hadoop2.6.tgz) 构建的 spark 1.5.2 和 Zeppelin 0.5.5 – 又是一个二进制 zeppelin- 0.5.5-孵化箱-all.tgz.
我怀疑这与 SqlContext 有关——因为我相信 Zeppelin 注入了它自己的 SqlContext。
有什么建议吗?感觉好像我错过了一些非常简单的东西。
我找到了解决问题的方法。 Zeppelin 中有一个错误,我需要重现并发送给团队。似乎如果你是 Zeppelin 的菜鸟(像我一样!)并创建你自己的 sqlContext 你会有效地破坏笔记本 - 直到你重新启动内核所有 tables 都在错误的上下文中注册并且后续段落不会在范围内有 table。重新启动内核解决了问题。