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

时间:2018-11-24 05:38:30

标签: java apache-spark pyspark apache-spark-sql py4j

这是代码段:

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()

在遇到错误之后:

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

所有其他方法都可以正常工作。试图进行大量研究但徒劳无功。任何线索都将受到高度赞赏

2 个答案:

答案 0 :(得分:5)

这表明Spark版本不匹配。 Before Spark 2.3 show方法仅接受两个参数:

def show(self, n=20, truncate=True):

since 2.3需要三个参数:

def show(self, n=20, truncate=True, vertical=False):

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

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

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

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

sc.version

vs。 JVM:

sc._jsc.version()

类似的问题通常是由于PYTHONPATH配置错误(直接导致的,或者是通过在现有的每个Spark二进制文件的顶部使用pip安装PySpark)或SPARK_HOME错误配置的结果。

答案 1 :(得分:0)

在spark-shell控制台上,输入变量名称并查看数据类型。 另外,您也可以在变量名之后两次制表。它将显示可以应用的必要功能。 DataFrame对象的示例。

res23: org.apache.spark.sql.DataFrame = [order_id: string, book_name: string ... 1 more field]