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

PySpark 3.3.0:DataFrame显示数据但写入CSV生成空文件

PySpark写入HDFS生成0字节CSV文件的排查与解决

以下是针对该问题的常见排查方向和解决方法:

  • 检查类型转换后的数据有效性
    你在写入前对review_keywords执行了cast('string')转换,先确认转换后的DataFrame仍有有效数据:

    result.withColumn('review_keywords', col('review_keywords').cast('string')).show()
    

    如果转换后数据丢失,说明原字段类型无法兼容string转换,需要调整转换逻辑(比如先处理原字段的格式)。

  • 确认HDFS路径的实际结构
    Spark写入CSV时,会将你指定的路径当作目录而非单个文件。你指定的word_tokens.txt实际是一个目录,真正的数据文件是目录下的part-xxxxx文件。执行以下命令查看目录内的文件:

    hdfs dfs -ls hdfs:///tmp/some_dir/some_other_dir/word_tokens.txt
    

    检查这些part文件的大小,而非直接查看“word_tokens.txt”这个目录本身。

  • 检查DataFrame的分区数
    若DataFrame的分区数为0,即使show()能显示数据,写入时也会生成空文件。执行以下代码查看分区数:

    print(result.rdd.getNumPartitions())
    

    如果分区数为0,可通过repartition(n)指定分区数(比如n=1)后再写入:

    result.withColumn('review_keywords', col('review_keywords').cast('string'))\
          .repartition(1)\
          .option("header", "true")\
          .mode('overwrite')\
          .csv("hdfs:///tmp/some_dir/some_other_dir/word_tokens.txt")
    
  • 排查HDFS权限与路径问题
    确认当前用户对目标HDFS路径有读写权限,执行命令查看权限:

    hdfs dfs -ls hdfs:///tmp/some_dir/some_other_dir/
    

    也可尝试更换一个测试路径(如hdfs:///tmp/test_output)验证是否能正常写入。

  • 验证Spark作业的执行状态
    Spark采用懒执行模式,虽然show()会触发计算,但写入操作可能因资源不足、静默异常导致未正确执行。可以:

    1. 执行count()操作确认数据行数:
      result.withColumn('review_keywords', col('review_keywords').cast('string')).count()
      
    2. 查看Spark日志(YARN日志或本地运行日志),排查是否存在隐藏的错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:12:57