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

问题描述 投票:5回答:2

我使用的是Zeppelin 0.5.5。我在这里找到了这个python的代码示例,因为我无法让我自己的代码与%pyspark一起工作。http:/www.makedatauseful.compython-spark-sql-zeppelin-tutorial. 我感觉他的%pyspark的例子起作用了,因为如果你使用原始的%spark飞艇教程,"银行 "表已经创建了。

这段代码在一个笔记本里。

%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")

这段代码是在同一个笔记本里,但工作板不同。

%sql 
SELECT count(1) FROM bank

org.apache.spark.sql.AnalysisException: no such table bank; line 1 pos 21
...
apache-spark-sql apache-zeppelin
2个回答
8
投票

我找到了这个问题的症结所在。在0.6.0之前,sqlContext变量是%pyspark中的sqlc。

缺陷可以在这里找到。https:/issues.apache.orgjirabrowseZEPPELIN-134。

在Pyspark中,SQLContext目前在变量名sqlc中可用,这与文档和scala中的变量名sqlContext不一致。这与文档和 scala 中的变量名 sqlContext 是不一致的。

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

相关代码。https:/github.comapacheincubator-zeppelinblobmastersparksrcmainresourcespythonzeppelin_pyspark.py#L66。

建议的解决方法是在您的%pyspark脚本中简单地执行以下操作。

sqlContext = sqlc

在这里找到。

https:/mail-archives.apache.orgmod_mboxincubator-zeppelin-users201506.mbox%3CCALf24sazkTxVd3EpLKTWo7yfE4NvW032j346N+6AuB7KKZS_AQ@mail.gmail.com%3E。


1
投票

用sqlc.registerDataFrameAsTable代替sqlContext,并替换registerAsTable。

%pyspark
from os import getcwd
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 = sqlc.createDataFrame(bank,bankSchema)
sqlc.registerDataFrameAsTable(bankdf, "bank")


%sql 
SELECT count(1) FROM bank
© www.soinside.com 2019 - 2024. All rights reserved.