Spark在字符串中使用逗号读取csv

Posted

技术标签:

【中文标题】Spark在字符串中使用逗号读取csv【英文标题】:Spark read csv with comma inside string 【发布时间】:2020-05-23 20:52:23 【问题描述】:

536381,22411,JUMBO SHOPPER VINTAGE RED PAISLEY,10,12/1/2010 9:41,1.95,15311,英国

"536381,82567,""AIRLINE LOUNGE,METAL SIGN"",2,12/1/2010 9:41,2.1,15311,United Kingdom"

536381,21672,WHITE SPOT RED CERAMIC DRAWER KNOB,6,12/1/2010 9:41,1.25,15311,United Kingdom

这些行是 csv 文件中的行示例。 我正在尝试在 Databricks 中阅读它,使用:

df = spark.read.csv ('file.csv', sep=',', inferSchema = 'true', quote = '"')

但是,由于字符串中的逗号,中间的行和其他类似的行没有进入右列。我该如何解决?

【问题讨论】:

【参考方案1】:

将报价设置为:

'""'
df = spark.read.csv('file.csv', sep=',', inferSchema = 'true', quote = '""')

看起来您的数据带有双引号 - 因此在读取数据时,它会将双引号视为字符串的开头和结尾。

编辑:我也假设问题出在这部分:

""AIRLINE LOUNGE,METAL SIGN""

【讨论】:

嗨!感谢兰维尔的帮助!实际上我已经尝试过了,但似乎引用只接受一个字符,所以它仍然不起作用。问题似乎来自这样一个事实,即我已经用 Excel 打开文件以查看数据,然后再将其上传到 databricks,并且 excel 在行的开头和结尾添加了这个奇怪的双引号,字符串之间有逗号(和将双引号加倍以标识字符串)。一位同事警告说,我刚刚通过再次从源下载文件并在打开它之前上传到数据块来解决它! 啊excel又来了哈哈。很高兴你知道了。

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

Scala Spark 处理带逗号的单引号字符

在 Spark 中读取最后一列作为值数组的 CSV(并且值在括号内并用逗号分隔)

熊猫在列中使用额外的逗号读取 csv

spark 2.x 正在使用 csv 函数将整数/双列作为字符串读取

使用 numpy.genfromtxt 读取包含逗号的字符串的 csv 文件

Spark CSV读取 忽略字符