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

标签 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

所有其他方法都适用。尝试了很多研究但徒劳无功。任何线索将不胜感激

最佳答案

这表明 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。

您可以通过直接从您的 session 中检查版本来确认,Python:

sc.version

对比虚拟机:

sc._jsc.version()

像这样的问题,通常是 PYTHONPATH 配置错误的结果(直接配置,或者使用 pip 安装 PySpark Spark 二进制文件)或 SPARK_HOME

关于java - PySpark 中不存在方法 showString([class java.lang.Integer, class java.lang.Integer, class java.lang.Boolean]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53455489/

相关文章:

java - 为什么我的 JFrame 不更新

java - 我的 Android 应用程序在运行时关闭,代码中没有错误

java - 如何在 Java8 中强制立即对流进行评估

python - Spark 聚合,其中输出列是函数,行是列

java - 是否有用于 appengine Java 报告生成的示例?

java - 如果在 Apache Spark Java 中为空,则用另一个值替换一行的值

apache-spark - AWS EMR 上的自定义 log4j.properties

java - Spark-通过命令行提交不强制执行 UTF-8 编码

python - 将 PySpark 数据框列类型转换为字符串并替换方括号

python - 过滤 pyspark DataFrame,其中行位于另一个 DataFrame 的范围内