PySpark中不存在方法showString([class java.lang.Integer,class java.lang.Integer,class java.lang.Boolean])

Tru*_*i J 3 java py4j apache-spark apache-spark-sql pyspark

这是代码段:

from pyspark import SparkContext
from pyspark.sql.session import SparkSession

sc = SparkContext()
spark = SparkSession(sc)
d = spark.read.format("csv").option("header", True).option("inferSchema", True).load('file.csv')
d.show()
Run Code Online (Sandbox Code Playgroud)

之后遇到错误:

An error occurred while calling o163.showString. Trace:
py4j.Py4JException: Method showString([class java.lang.Integer, class java.lang.Integer, class java.lang.Boolean]) does not exist
Run Code Online (Sandbox Code Playgroud)

所有其他方法都可以正常工作。试图进行大量研究但徒劳无功。任何线索将不胜感激

104*_*ica 5

这表明Spark版本不匹配。在Spark 2.3 show方法之前,只有两个参数:

def show(self, n=20, truncate=True):
Run Code Online (Sandbox Code Playgroud)

从2.3开始,它需要三个参数:

def show(self, n=20, truncate=True, vertical=False):
Run Code Online (Sandbox Code Playgroud)

在您的情况下,Python客户端似乎调用了后者,而JVM后端使用了较旧的版本。

由于SparkContext初始化在2.4中进行了重大更改,这将导致上的失败SparkContext.__init__,因此您可能使用:

  • 2.3.x Python库。
  • 2.2.x JAR。

您可以通过直接从会话中检查版本来确认这一点:Python:

sc.version
Run Code Online (Sandbox Code Playgroud)

与JVM:

sc._jsc.version()
Run Code Online (Sandbox Code Playgroud)

诸如此类的问题通常是由于配置错误PYTHONPATH(直接或通过在现有的最高Spark二进制文件上pip安装安装PySpark)或导致的SPARK_HOME