有没有办法禁止用','分隔,并在scala中用','分隔csv文件

问题描述 投票:0回答:1

我正在使用scala读取一个csv文件来填充数据集,在那里我面临分隔符问题,这是因为我的一些字段中有','。

数据类似于A,B,C(temp,temp1,temp3),D,E

这是针对spark数据集,我在其中尝试读取文件然后将其映射到数据集架构,但它似乎无法正常工作。

SparkSession.read
    .option("delimiter",",")
    .option("header","true")
    .schema(schema)
    .csv(path).as[SampleSchema]

我希望它能够正确分隔。我已经观察到实际定界符为','的区别,它不应该用','来划分

scala apache-spark apache-spark-dataset
1个回答
2
投票

如上所述,引号应该用在CSV文件中。如果这不是一个选项,那么使用负前瞻正则表达式是非常可行的。给出一个CSV文件

h1,h2,h3,h4,h5
A,B,C(temp, temp1, temp3),D,E
A,B,C,D,E

并假设|未包含在文件中(可以使用任何字符)

val txt = spark.read
  .textFile(path)
  .map(_.replaceAll(",(?!\\s)", "|"))

spark.read
  .option("delimiter", "|")
  .option("header", "true")
  .csv(txt)
  .show(20, false)

输出:

+---+---+---------------------+---+---+
|h1 |h2 |h3                   |h4 |h5 |
+---+---+---------------------+---+---+
|A  |B  |C(temp, temp1, temp3)|D  |E  |
|A  |B  |C                    |D  |E  |
+---+---+---------------------+---+---+

因此,如果需要,我们仍然可以从CSV解析器功能中受益,例如标题跳过和模式推断。

© www.soinside.com 2019 - 2024. All rights reserved.