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
相关产品推荐
相关产品推荐

