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

Spark DataFrame所有列值添加双引号并保存为CSV的方法求助

Spark DataFrame 保存CSV时为所有列添加双引号的解决方法

问题说明

将Spark DataFrame保存为CSV文件时,需要实现所有列首尾添加双引号,且列分隔符为|。当前使用option('quote', '')无法达到预期效果,寻求正确配置方式。

示例代码

emp = [(1,"Smith",-1,"2018","10","M",3000), \
    (2,"Rose",1,"2010","20","M",4000), \
    (3,"Williams",1,"2010","10","M",1000), \
    (4,"Jones",2,"2005","10","F",2000), \
    (5,"Brown",2,"2010","40","",-1), \
    (6,"lara",2,"2010","30","",-1), \
    (7,"mario",2,"2010","10","",-1), \
    (8,"bruno",2,"2010","40","",-1), \
    (9,"luis",2,"2010","20","",-1) \
  ]

empDF = spark.createDataFrame(data=emp)
empDF.show()

# 原代码(无法实现需求)
empDF.coalesce(1).write.format('csv').option('quote', '').option('header','true').option("delimiter","|").save(path_destination,mode='overwrite')

期望输出

_1|_2|_3|_4|_5|_6|_7
"1"|"Smith"|"-1"|"2018"|"10"|"M"|"3000"
"2"|"Rose"|"1"|"2010"|"20"|"M"|"4000"
"3"|"Williams"|"1"|"2010"|"10"|"M"|"1000"
...

解决方案

原代码的问题在于设置了quote='',这会禁用引号功能,而非为所有列添加引号。要实现所有列强制加双引号,需调整两个关键配置:

  • quote: 指定引号字符为双引号('"')
  • quoteMode: 设置为"ALL",强制为所有字段添加引号

修改后的代码

empDF.coalesce(1).write.format('csv') \
    .option('quote', '"') \
    .option('quoteMode', 'ALL') \
    .option('header', 'true') \
    .option('delimiter', '|') \
    .save(path_destination, mode='overwrite')

配置说明

  • quote: '"': 定义包裹字段的引号为双引号
  • quoteMode: 'ALL': Spark CSV Writer会为所有字段(无论类型或内容)添加引号,完全匹配需求
  • delimiter: '|': 设置列分隔符为竖线
  • header: 'true': 保留表头行(表头不会被引号包裹,与期望输出格式一致)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:17:11