You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中创建的DataFrame调用df.show()报错,导入的DataFrame正常

PySpark df.show() 报错解决

问题描述

使用PySpark开发时,其他操作正常,但调用df.show()显示自定义DataFrame时,持续抛出以下错误:

Py4JJavaError: An error occurred while calling o68.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 1.0 failed 1 times, most recent failure: Lost task 0.0 in stage 1.0 (TID 1) (Fahd executor driver): org.apache.spark.SparkException: Python worker exited unexpectedly (crashed)
    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator$$anonfun$1.applyOrElse(PythonRunner.scala:612)
    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator$$anonfun$1.applyOrElse(PythonRunner.scala:594)
    at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:38)
    at org.apache.spark.api.python.PythonRunner$$anon$3.read(PythonRunner.scala:789)
    at org.apache.spark.api.python.PythonRunner$$anon$3.read(PythonRunner.scala:766)
    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:525)
    at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37)
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:491)
    at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)
    at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenEvaluatorFactory$WholeStageCodegenPartitionEvaluator$$anon$1.hasNext(WholeStageCodegenEvaluatorFactory.scala:43)
    at org.apache.spark.sql.execution.SparkPlan.$anonfun$getByteArrayRdd$1(SparkPlan.scala:388)
    at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2(RDD.scala:893)
    at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2$adapted(RDD.scala:893)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:367)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:331)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
    at org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:166)
    at org.apache.spark.scheduler.Task.run(Task.scala:141)
    at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)
    at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)
    at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.io.EOFException
    at java.base/java.io.DataInputStream.readFully(DataInputStream.java:210)

解决方法

  • 检查版本兼容性:确认Python版本在Spark官方支持范围内(如Spark 3.x对应Python 3.7-3.10),同时保证PySpark包版本与集群/本地Spark版本完全一致,版本不匹配会导致worker通信失败。
  • 增加Python Worker内存:内存不足会引发worker崩溃,可通过配置调整:
    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder \
        .appName("YourApp") \
        .config("spark.python.worker.memory", "4g") \
        .getOrCreate()
    
  • 排查DataFrame数据问题:
    • 检查是否包含特殊数据类型(如自定义UDF返回的复杂类型、超大字符串/二进制数据),这类数据易在序列化时出错。
    • 用极简DataFrame测试:
      test_df = spark.createDataFrame([(1, "test")], ["id", "name"])
      test_df.show()
      
      若测试正常,说明原DataFrame数据存在问题,逐步排查内容。
  • 禁用Whole Stage Codegen:部分场景下该优化会引发兼容性问题,临时禁用测试:
    spark.conf.set("spark.sql.codegen.wholeStage", "false")
    
  • 检查系统资源:本地模式下确认机器内存、CPU充足,避免因资源耗尽导致worker进程被系统杀死。
  • 查看Worker日志:启用DEBUG级日志获取崩溃细节:
    spark.conf.set("spark.python.worker.log.level", "DEBUG")
    
    日志会记录worker崩溃的具体原因,比如模块缺失、代码错误等。

内容的提问来源于stack exchange,提问作者Fahd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:17:04