pyspark代码在控制台中工作,但在齐柏林飞艇中不工作

我有一个带有Spark 2.4.4和python 2.7.16的EMR(emr-5.28.0)。

如果我SSH到集群并像这样执行pyspark:

pyspark --jars /home/hadoop/jar/spark-redshift_2.11-2.0.1.jar,/home/hadoop/jar/spark-avro_2.11-4.0.0.jar,/home/hadoop/jar/minimal-json-0.9.5.jar,/usr/share/aws/redshift/jdbc/RedshiftJDBC.jar --packages org.apache.spark:spark-avro_2.11:2.4.4

并执行以下代码:

url = "jdbc:redshift://my.cluster:5439/my_db?user=my_user&password=my_password"
query = "select * from schema.table where trunc(timestamp)='2019-09-10'"
df = sqlContext.read.format('com.databricks.spark.redshift')\
.option("url",url)\
.option("tempdir","s3a://bucket/tmp_folder")\
.option("query",query)\
.option("aws_iam_role","arn_iam_role")\
.load()

一切正常,我可以使用该df。 但是,如果我在相同的EMR中使用相同版本的所有东西打开Zeppelin笔记本,并使用以下命令执行一个单元格:

%dep
z.load("/home/hadoop/jar/spark-redshift_2.11-2.0.1.jar")
z.load("/home/hadoop/jar/spark-avro_2.11-4.0.0.jar")
z.load("/home/hadoop/jar/minimal-json-0.9.5.jar")
z.load("/usr/share/aws/redshift/jdbc/RedshiftJDBC.jar")
z.load("org.apache.spark:spark-avro_2.11:2.4.4")

在下一个单元格中,使用相同的代码段(以%pyspark开头),当我尝试执行df.count()时,出现以下错误:

java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ of type scala.collection.Seq in instance of org.apache.spark.rdd.MapPartitionsRDD

我多次尝试重新启动解释器,并且尝试将ssh时在控制台中使用的--jar选项添加到解释器args,但是没有运气。 有什么想法吗?

pqlay 回答:pyspark代码在控制台中工作,但在齐柏林飞艇中不工作

我认为这与z.load对于Pyspark查询的工作方式有关(或者不起作用)。

与其以这种方式加载依赖项,而是转到设置->解释器,找到pyspark并在其中加载依赖项,然后重新启动解释器。这是--jars

的“ Zeppelin版本”

这是此文档的官方文档链接-https://zeppelin.apache.org/docs/0.6.2/manual/dependencymanagement.html

我知道对于Spark SQL z.deps不起作用,因此这可能是相同的问题。

本文链接:https://www.f2er.com/3075266.html

大家都在问