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

如何使用Apache Spark和Scala正确读取含方括号内逗号的CSV文件

使用Apache Spark(Scala)正确解析含特殊格式列的CSV文件

给定的第三方CSV文件中,B列的值要么是被双引号包裹、内部带逗号的数组格式字符串,要么为空。要正确解析这类CSV,只需在Spark读取时配置合适的选项即可,无需复杂的自定义逻辑。

完整Scala代码示例

import org.apache.spark.sql.SparkSession

object ParseSpecialCSV {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("ParseSpecialCSV")
      .master("local[*]") // 本地调试用,生产环境可移除
      .getOrCreate()

    import spark.implicits._

    // 读取CSV并配置关键解析选项
    val df = spark.read
      .option("header", "true")
      .option("quote", "\"")
      .option("escape", "\"")
      .option("nullValue", "")
      .option("ignoreLeadingWhiteSpace", false)
      .option("ignoreTrailingWhiteSpace", false)
      .csv("path/to/your/target.csv")

    // 打印解析结果
    df.show(false)

    spark.stop()
  }
}

关键配置说明

  • header: true:识别文件第一行为列名,对应示例中的A、B列
  • quote: "\"":指定双引号作为值的包裹边界符,引号内部的逗号会被视为值的一部分,而非列分隔符
  • nullValue: "":将CSV中无内容的空字段(如示例第三行的B列)解析为Spark的null值
  • escape: "\"":兼容值内部存在转义双引号的场景,示例中虽未出现但建议保留以提升解析鲁棒性

解析后的DataFrame结果

运行代码后会得到符合预期的输出:

+----------+------------------------+
|A         |B                       |
+----------+------------------------+
|xxxxxxxxx |"['05-01', '06-30']"    |
|yyyyyyyyy |"['04-01', '04-30']"    |
|zzzzzzzzz |null                    |
+----------+------------------------+

内容的提问来源于stack exchange,提问作者ashish.g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:50:05