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()会触发计算,但写入操作可能因资源不足、静默异常导致未正确执行。可以:- 执行
count()操作确认数据行数:result.withColumn('review_keywords', col('review_keywords').cast('string')).count() - 查看Spark日志(YARN日志或本地运行日志),排查是否存在隐藏的错误信息。
- 执行
内容的提问来源于stack exchange,提问作者StrangerThinks
相关产品推荐
相关产品推荐

