我创建了一个表HCatalog
表,其中分区映射到S3中的某些zip文件。
在Zeppelin中,我使用%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
,该SparkContext
已用于创建它并且无法在其外部访问。
Apache Zeppelin初始化了SQLContext
和sc
,它们在解释器之间共享,并且可以分别作为sqlContext
和%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")
访问。如果您希望从解释器互操作性中受益,那么您应该使用这些实例,而不是创建另一个实例。换句话说,不要使用默认上下文创建自定义上下文。
感谢zero323为你的指针。我删除了HiveContext并修改了代码,如下所示:
qazxswpoi