Spark/Scala读取CSV文件时如何处理单元格内的逗号
Spark/Scala读取含内置逗号的CSV文件解决方案
你提供的示例CSV属于标准RFC4180格式规范,所有字段默认用双引号包裹,字段内部的逗号、转义双引号都符合通用CSV格式要求,只需正确配置Spark CSV读取参数即可避免单元格内部逗号被误识别为字段分隔符。
核心配置参数
- 启用表头读取:
header设置为true,识别第一行作为字段名 - 指定字段包裹符:
quote设置为",明确双引号包裹的全部内容为单个完整单元格 - 指定转义符:
escape设置为",匹配CSV中用两个双引号转义原义双引号的规则 - 可选配置:若需要自动推断字段类型,可设置
inferSchema为true
完整代码示例
import org.apache.spark.sql.SparkSession object CsvParseDemo { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("CSV Parse Test") .master("local[*]") // 本地调试时使用,集群运行请删除该行 .getOrCreate() val df = spark.read .option("header", "true") .option("quote", "\"") .option("escape", "\"") .option("charset", "UTF-8") // 可选:自动推断字段类型,大数据量场景下建议手动指定schema提高性能 .option("inferSchema", "true") .csv("替换为你的CSV文件实际路径") // 验证读取结果,false参数表示不截断字符串内容,可完整查看地址字段 df.select("address").show(false) spark.stop() } }
结果验证
运行代码后输出的address字段会保留完整的原地址内容,包含逗号的地址不会被拆分为多列,字段内转义的双引号也会被正确解析为原义双引号。
内容的提问来源于stack exchange,提问作者dMux10
相关产品推荐
相关产品推荐

