在Zeppelin中使用%pyspark解释器注册表时,我无法访问%sql中的表

Kev*_*sko 5 apache-spark-sql apache-zeppelin

我正在使用Zeppelin 0.5.5.我在这里找到了python的代码/示例,因为我无法使用%pyspark http://www.makedatauseful.com/python-spark-sql-zeppelin-tutorial/.我感觉他的%pyspark示例有效,因为如果您使用原始的%spark zeppelin教程,则已经创建了"bank"表.

这段代码在笔记本中.

%pyspark
from os import getcwd
# sqlContext = SQLContext(sc) # Removed with latest version I tested
zeppelinHome = getcwd()
bankText = sc.textFile(zeppelinHome+"/data/bank-full.csv")

bankSchema = StructType([StructField("age", IntegerType(),     False),StructField("job", StringType(), False),StructField("marital", StringType(), False),StructField("education", StringType(), False),StructField("balance", IntegerType(), False)])

bank = bankText.map(lambda s: s.split(";")).filter(lambda s: s[0] != "\"age\"").map(lambda s:(int(s[0]), str(s[1]).replace("\"", ""), str(s[2]).replace("\"", ""), str(s[3]).replace("\"", ""), int(s[5]) ))

bankdf = sqlContext.createDataFrame(bank,bankSchema)
bankdf.registerAsTable("bank")
Run Code Online (Sandbox Code Playgroud)

此代码位于同一笔记本中,但工作台不同.

%sql 
SELECT count(1) FROM bank

org.apache.spark.sql.AnalysisException: no such table bank; line 1 pos 21
...
Run Code Online (Sandbox Code Playgroud)

Kev*_*sko 8

我发现了这个问题.在0.6.0之前,sqlContext变量是%pyspark中的sqlc.

缺陷可以在这里找到:https://issues.apache.org/jira/browse/ZEPPELIN-134

在Pyspark中,SQLContext目前在变量名sqlc中可用.这与文档和scala中的变量名称(sqlContext)不兼容.

除了sqlc之外,sqlContext可以用作SQLContext的变量(为了向后兼容)

相关代码:https: //github.com/apache/incubator-zeppelin/blob/master/spark/src/main/resources/python/zeppelin_pyspark.py#L66

建议的解决方法只是在%pyspark脚本中执行以下操作

sqlContext = sqlc

在这里找到:

https://mail-archives.apache.org/mod_mbox/incubator-zeppelin-users/201506.mbox/%3CCALf24sazkTxVd3EpLKTWo7yfE4NvW032j346N+6AuB7KKZS_AQ@mail.gmail.com%3E