我有三个Zeppelin(0.6)段落:
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来获得漂亮的内置图形。)
答案 0 :(得分:2)
只有当您使用Zeppelin为您提供的上下文(作为sqlContext
)时,才会提供解释器之间的互操作性。在这里创建自己的上下文后:
val hc = new org.apache.spark.sql.hive.HiveContext(sc)
它与%sql
使用的上下文没有任何关联,而Table not found
是预期的错误。
解决方案:使用sqlContext
创建和注册表。