首页 > 解决方案 > 如何修复 PySpark 中的 DataFrame 函数问题 - Py4JJavaError

问题描述

我正在尝试在 PySpark 和 Notebook 中创建和分析数据框。

以下是我在 Jupyter Notebook 中的代码。

from pyspark.sql import SparkSession

spark = SparkSession.builder \
   .master("local") \
   .appName("Neural Network Model") \
   .config("spark.executor.memory", "6gb") \
   .getOrCreate()

我能够启动 Spark Session。

df1 = spark.createDataFrame([('John', 56, 80)])
print(df1.dtypes)
print(df1)
print(df1.show())

我能够创建 df1,数据框,但不知何故,当我尝试在 df1.show() 中使用数据框功能时收到错误消息

Py4JJavaError Traceback(最近一次调用最后一次)在 2 print(df1.dtypes) 3 print(df1) ----> 4 print(df1.show())

Py4JJavaError:调用 o501.showString 时出错。:org.apache.spark.SparkException:作业因阶段失败而中止:阶段 9.0 中的任务 0 失败 1 次,最近失败:阶段 9.0 中丢失任务 0.0(TID 22,本地主机,执行程序驱动程序):org.apache.spark .SparkException:Python 工作者无法重新连接。在 org.apache.spark.api.python.PythonWorkerFactory.createSimpleWorker(PythonWorkerFactory.scala:170) 在 org.apache.spark.api.python.PythonWorkerFactory.create(PythonWorkerFactory.scala:97) 在 org.apache.spark.SparkEnv .createPythonWorker(SparkEnv.scala:117) at org.apache.spark.api.python.BasePythonRunner.compute(PythonRunner.scala:108) at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:65 ) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)

你能帮我解决这个问题吗?我不确定是系统问题还是我的代码。

谢谢!!!

标签: dataframepysparkjupyter-notebook

解决方案


df1.show()只显示数据框的内容。它是一个返回 Unit 的函数(它不返回值)。所以print(df1.show())会失败(在 Databricks 笔记本中返回无)

如果要查看df1的内容,只需要做

df1.show()

没有打印()

这实际上是 show() 的实现:

def show(): Unit = show(20)

def show(numRows: Int): Unit = show(numRows, truncate = true)

def show(numRows: Int, truncate: Boolean): Unit = if (truncate) {
   println(showString(numRows, truncate = 20))
 } else {
   println(showString(numRows, truncate = 0))
}

推荐阅读