Zeppelin 中带有 HCatalog table 的 pyspark

pyspark with HCatalog table in Zeppelin

我创建了一个 table HCatalog table 分区映射到 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_2htable,如下:

第 2 段:

%sql
select * from f_req_2h limit 1;

我收到 "table not found" 错误。感谢任何帮助或指点。

这是预期的行为。 Spark 中的每个 table 或 DataFrame 都绑定到一个特定的 SQLContext,该 SQLContext 已用于创建它并且无法在其外部访问。

Apache Zeppelin 初始化 SparkContextSQLContext,它们在解释器之间共享,可以分别作为 scsqlContext 访问。如果您想从解释器互操作性中获益,则应该使用这些实例,而不是创建另一个实例。换句话说,不要使用默认上下文创建自定义上下文。

感谢 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")