Spark 3.4.0如何读取带引号及转义字符的CSV?
Spark CSV读写的正确配置方案
针对你遇到的CSV读写问题,分读取和写入两个阶段配置对应选项即可解决:
一、读取CSV时的配置
原CSV字段用双引号包裹,且部分字段前带空格,配置以下选项可确保正确解析:
sparkSession.read() .option("quote", "\"") // 指定字段包裹符为双引号 .option("ignoreLeadingWhiteSpace", "true") // 忽略字段开头的空格 .option("header", "false") // 你的CSV无表头,可按需调整 .csv("trouble.csv");
配置后读取得到的DataFrame数据即为:1,2,Learn more https://example.com
二、写入CSV时的配置
要实现去掉引号、不转义URL中的斜杠,同时输出带空格的分隔符,配置如下:
df.write() .option("quote", "NONE") // 禁用字段包裹引号 .option("escapeQuotes", "false")// 关闭自动转义特殊字符的功能 .option("sep", ", ") // 设置分隔符为逗号加空格 .option("header", "false") // 按需决定是否输出表头 .mode(SaveMode.Overwrite) .csv("output.csv");
配置后写入结果会是:1, 2, Learn more https://example.com,不会出现URL被转义成https:\/\/example.com的问题。
关键选项说明
quote="NONE":彻底关闭字段的引号包裹,避免输出不必要的引号escapeQuotes=false:阻止Spark自动转义字段中的特殊字符(比如URL里的斜杠),仅当字段包含分隔符时才需要开启该功能ignoreLeadingWhiteSpace=true:读取时自动去除字段前的空格,保证数据整洁
内容的提问来源于stack exchange,提问作者Bryan Erazo
相关产品推荐
相关产品推荐

