有没有办法禁止通过', '分隔,而只用 scala 中的 ',' 分隔 csv 文件



我正在使用Scala读取CSV文件来填充数据集,在那里我面临的分界符问题,这是由于我的某些字段中的某些字段''

数据就像a,b,c(temp,temp1,temp3(,d,e

这是针对我尝试读取文件然后将其映射到数据集架构的Spark数据集但似乎不起作用的。

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

我希望它可以正确地界定。我已经观察到实际定界符为','的区别,并且它不应按','

划界。

如前所述,引号应在CSV文件中使用。如果这不是一个选择,则可以使用负面的LookAhead正则表达式。给定一个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解析器功能(如有需要(中受益。

最新更新