我创建了一个表HCatalog
表,其中的分区映射到 S3 中的一些 zip 文件。
在齐柏林飞艇中,我使用 %pyspark
模块创建了一个具有以下代码的段落:
第1段:
%pyspark
from pyspark.sql import HiveContext
hc = HiveContext( sc )
f_req_2h = hc.table( "default.f_req_2h" ) # a HCatalog table in the default schema"
print f_req_sh.count()
f_req_2h.registerTempTable("f_req_2h")
当我运行它时,到目前为止一切顺利。然后,我创建了第二段来查询第 1 段中注册的f_req_2h表,如下所示:
第2段:
%sql
select * from f_req_2h limit 1;
我收到一个"table not found"
错误。任何帮助或指针不胜感激。
预期的行为。Spark 中的每个表或DataFrame
都绑定到用于创建它的特定SQLContext
,并且无法在其外部访问。
Apache Zeppelin初始化SparkContext
和SQLContext
,它们在解释器之间共享,可以分别作为sc
和sqlContext
访问。如果您想从解释器互操作性中受益,则应使用这些实例,而不是创建另一个实例。换句话说,不要使用默认上下文创建自定义上下文。
感谢 zero323 的指点。我删除了HiveContext并修改了代码,如下所示,它可以工作:
%pyspark
f_req_2h = sqlContext.table( "default.f_req_2h" )
# a HCatalog table in the default schema"
print f_req_sh.count()
f_req_2h.registerTempTable("f_req_2h")