Spark SQL写入CSV时字段含逗号导致列数据偏移问题求解
解决方案
Spark提供原生内置参数即可解决该问题,无需额外开发逻辑。
核心原理
CSV默认以逗号作为字段分隔符,字段内部的逗号未被引用符包裹时,会被解析工具识别为字段拆分边界,导致单元格偏移。你可以通过Spark CSV写入的内置参数配置引用规则,自动处理含特殊字符的字段。
修复后代码
spark.sql(""" SELECT * FROM invalidData """).coalesce(1) .write .option("header", "true") // 指定双引号为字段引用符,含分隔符/换行符的字段会自动被该符号包裹 .option("quote", "\"") // 可选配置:如果字段内容包含双引号,指定转义符避免引用规则冲突 .option("escape", "\"") // Spark 2.x+已内置CSV支持,无需指定第三方数据源格式,兼容性更好 .format("csv") .mode("overwrite") .save(s"$dbfsMountPoint/invalid/${fileName.replace(".xlsx", ".csv")}")
补充说明
- 后续读取该CSV文件时,无论用Spark还是Excel、其他CSV解析工具,只要配置对应的引用符为双引号,就不会出现字段拆分错误的问题
- 如果你的业务场景不允许字段被双引号包裹,也可以通过
.option("delimiter", "|")修改分隔符为业务数据中不存在的特殊字符,避免和字段内容冲突
内容的提问来源于stack exchange,提问作者Manish Jain
相关产品推荐
相关产品推荐

