Spark忽略字符串中的逗号

Posted

技术标签:

【中文标题】Spark忽略字符串中的逗号【英文标题】:Spark ignore commas in string 【发布时间】:2018-02-07 13:06:06 【问题描述】:

尝试通过 spark 会话加载 csv,但遇到 .i.e. 中包含双引号和逗号的字符串的问题

"""A"" STAR ACCOUNTING,& TRAINING SOLUTIONS LIMITED"

这会根据上面的字符串创建具有 2 个不同列的数据框,输出:

"""A"" STAR ACCOUNTING 
& TRAINING SOLUTIONS LIMITED"

通过 spark session 读取 csv 读取 csv

val df = ss.read
          .option("header", true)
          .option("ignoreLeadingWhiteSpace", "true")
          .csv(csvFile)
          .sort(id)

无论如何要读取 csv 文件并跳过字符串中的逗号?

【问题讨论】:

你能发布你正在运行的命令吗? 你是如何阅读文件的?记录已经用引号括起来以避免分隔符冲突。使用 spark csv 你应该很好 用读取 csv 的代码编辑 【参考方案1】:

看起来您的数据使用" 作为转义字符,而默认值是\。您应该在阅读时提供quote 选项:

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.3.0
      /_/

Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_151)
Type in expressions to have them evaluated.
Type :help for more information.

scala> spark.read.option("escape", "\"").csv(Seq("\"\"\"A\"\" STAR ACCOUNTING,& TRAINING SOLUTIONS LIMITED").toDS).show(false)
+------------------------------------------------+
|_c0                                             |
+------------------------------------------------+
|"A" STAR ACCOUNTING,& TRAINING SOLUTIONS LIMITED|
+------------------------------------------------+

【讨论】:

以上是关于Spark忽略字符串中的逗号的主要内容,如果未能解决你的问题,请参考以下文章

用逗号分割字符串,但忽略括号或引号中的逗号

在逗号上拆分字符串并忽略双引号中的逗号[重复]

使用逗号分割文本,但忽略字符串中的任何字符

拆分由逗号分隔的 JSON blob 列表(忽略 JSON blob 中的逗号)[重复]

如何在 Spark Scala 数据框中拆分逗号分隔的字符串并获取 n 个值?

在逗号上拆分字符串但忽略双引号内的逗号?