创建 SparkSession 的 Spark 3.0.0 错误:pyspark.sql.utils.IllegalArgumentException:<exception str() fail

Posted

技术标签:

【中文标题】创建 SparkSession 的 Spark 3.0.0 错误:pyspark.sql.utils.IllegalArgumentException:<exception str() failed>【英文标题】:Spark 3.0.0 error creating SparkSession: pyspark.sql.utils.IllegalArgumentException: <exception str() failed> 【发布时间】:2020-07-07 17:33:20 【问题描述】:

我正在尝试使用 Hadoop 2.7.3 和 Hive 1.2.1 为我的 Yarn 集群构建 Spark 3.0.0。我下载了源代码并使用

创建了一个可运行的 dist

./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phive-1.2 -Phadoop-2.7 -Pyarn

我们在生产中运行 Spark 2.4.0,所以我从那里复制了 hive-site.xml、spark-env.sh 和 spark-defaults.conf。

当我尝试在普通 Python REPL 中创建 SparkSession 时,我收到以下无信息错误。我该如何调试呢?我可以运行 spark-shell 并通过 Hive 访问进入 scala 提示符,似乎没有错误。

Python 3.6.3 (default, Apr 10 2018, 16:07:04)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import sys
>>> os.environ['SPARK_HOME'] = '/home/pmccarthy/custom-spark-3'
>>> sys.path.insert(0,os.path.join(os.environ['SPARK_HOME'],'python','lib','py4j-src.zip'))
>>> sys.path.append(os.path.join(os.environ['SPARK_HOME'],'python'))
>>> import pyspark
>>> from pyspark.sql import SparkSession
>>> spark = (SparkSession.builder.enableHiveSupport().config('spark.master','local').getOrCreate())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pmccarthy/custom-spark-3/python/pyspark/sql/session.py", line 191, in getOrCreate
    session._jsparkSession.sessionState().conf().setConfString(key, value)
  File "/home/pmccarthy/custom-spark-3/python/lib/py4j-src.zip/py4j/java_gateway.py", line 1305, in __call__
  File "/home/pmccarthy/custom-spark-3/python/pyspark/sql/utils.py", line 137, in deco
    raise_from(converted)
  File "<string>", line 3, in raise_from
pyspark.sql.utils.IllegalArgumentException: <exception str() failed>

【问题讨论】:

您的某些配置似乎无法识别; session._jsparkSession.sessionState().conf().setConfString(key, value)github.com/apache/spark/blob/master/python/pyspark/sql/… 经过一些测试,似乎enableHiveSupport() 导致了崩溃 - 如果我在没有它的情况下构建 SparkSession,那么它可以正常启动。不过,这仍然是一个谜,因为无论我的 hive-site.xml 是否有我的配置或空白,它都会以同样的方式崩溃。 有类似的问题。为了获得更好的错误信息,我们将 github.com/apache/spark/blob/branch-3.0/python/pyspark/sql/… 更改为 raise e 谢谢,这很有帮助。似乎-Phive-1.2 但不包括-Phive-thriftserver 阻止了一些必要的罐子的构建。这样做之后,我仍然没有完全支持,但能够使用.config('spark.sql.hive.metastore.version','1.2.1').config('spark.sql.hive.metastore.jars','maven') 连接到我的元存储。看起来构建标志仍然暗示它应该为 hive 1.2 生成一个有效的安装。 【参考方案1】:

我也遇到了pyspark.sql.utils.IllegalArgumentException: &lt;exception str() failed&gt;。这是我使用 Spark 3 中删除的选项 (spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation) 造成的。

【讨论】:

以上是关于创建 SparkSession 的 Spark 3.0.0 错误:pyspark.sql.utils.IllegalArgumentException:<exception str() fail的主要内容,如果未能解决你的问题,请参考以下文章

SparkSession

Pytest:创建 SparkSession

Spark SQL中的DataFrame的创建

spark DataFrame的创建几种方式和存储

spark 源码分析之二 -- SparkContext 的初始化过程

PySpark 中的 SparkSession 和 SparkContext 启动