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

PySpark写入CSV文件时每条记录末尾出现额外字符问题

问题解决:PySpark合并列存CSV后记录末尾多出额外字符

可能原因及对应解决办法

1. CSV写入的换行符格式问题

PySpark默认CSV写入器在不同系统下可能使用不同换行符(比如Windows的\r\n,Linux下是\n),用awk '{print length($0)}'检查时,\r会被计入字符长度,导致结果超出预期。

解决办法:写入CSV时显式指定Linux风格换行符:

df2.coalesce(1).write.format('csv')
    .option('lineSep', '\n')
    .mode('overwrite')
    .save('/axp/aet/gardpa/dev/testfolder/pyspark')

2. 原字段含隐藏空白字符

如果原始4列的字段末尾带有空格、制表符等隐藏空白,show(truncate=False)不会直观显示,但合并后会被保留,导致记录长度超标。

解决办法:合并前先对每一列做trim处理,去除首尾空白:

from pyspark.sql.functions import col, trim, concat

# 先清理每列的首尾空白再合并
df2 = df2.withColumn('onecol', concat(*(trim(col(c)) for c in df2.columns))).select('onecol')

3. CSV自动添加的引号

如果合并后的字段包含逗号、引号等特殊字符,PySpark会自动给字段套双引号,这也会增加记录长度。若你的数据无特殊字符,可以禁用引号功能:

df2.coalesce(1).write.format('csv')
    .option('quote', '')
    .option('escape', '')
    .mode('overwrite')
    .save('/axp/aet/gardpa/dev/testfolder/pyspark')

验证方法

修改代码重新生成CSV后,用以下命令同时查看记录长度和内容,方便定位问题:

cat test.txt | awk '{print length($0), $0}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:27:07