2017-04-15 41 views
0

我有三个齐柏林飞艇(0.6)段:齐柏林%SQL无法访问临时表

PARA1:

val hc = new org.apache.spark.sql.hive.HiveContext(sc) 
val df = hc.sql("SELECT * FROM tweetsORC") 
z.put("wds", df) 

PARA2:

import org.apache.spark.sql.DataFrame        
import sqlContext.implicits._ 
import org.apache.spark.sql.functions._ 

val df = z.get("wds").asInstanceOf[DataFrame] 
df.select(explode($"filtered").as("value")).groupBy("value").count().sort(desc("count")).show(20, false) 
df.registerTempTable("top20") 

para3各个:

%sql 
select * from top20 

这给出了以下错误:

Table not found: top20 

我认为这是因为表是hivecontext的一部分,sql看不到它。我看到一些类似的问题的解决方案,建议创建一个sqlcontext是问题,但我没有这样做。那么%sql段如何访问临时表?任何指针都非常感谢。 (我想用%sql作为漂亮的内置图表)。

回答

2

仅当您使用Zeppelin为您提供的上下文(如sqlContext)时,才会提供解释器之间的互操作性。一旦你创建你自己的上下文这里:

val hc = new org.apache.spark.sql.hive.HiveContext(sc) 

它没有连接以任何方式通过%sqlTable not found使用的上下文是预期的错误。

解决方案:使用sqlContext来创建和注册表。

+1

感谢用户。你能再解释一下吗?这是否意味着我可以将val df = hc.sql(“SELECT * FROM tweetsORC”)更改为val df = sqlContext.sql(“SELECT * FROM tweetsORC”)? – schoon

+0

是的,它的工作原理。谢谢! – schoon