在Spark中读取多行CSV文件时,是否有将换行符保留在引号内的选项



我有一些CSV文件,第三行引号内有换行符(第一行是CSV头(。

data/testdata.csv

"id", "description"
"1", "some description"
"2", "other description with line
break"

不管它的CSV是否正确,我都必须将它解析为有效的记录。这就是我尝试的原因

public class Main2 {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
.master("local[4]")
.getOrCreate();
Dataset<Row> rows = spark
.read()
.format("csv")
.option("header", "true")
.load("data/testdata.csv");
rows
.foreach(row -> System.out.println(row));
}
}

输出如下:

[1, "some description"]
[2, "other description with line]
[break",null]

如您所见,Spark将break"视为一条新记录,并用null填充缺失的列。问题是:Spark的CSV解析器是否有允许这种换行的选项?

我尝试了下面的代码(参考(,但它不起作用

Dataset<Row> rows = spark.read()
.option("parserLib", "univocity")
.option("multiLine", "true")
.csv("data/testdata.csv");

根据本文,自spark 2.2.0以来,有可能解析多行csv文件。在我的情况下,这些设置完成了任务:

sparkSession
.read()
.option("sep", ";")
.option("quote", """)
.option("multiLine", "true")
.option("ignoreLeadingWhiteSpace", true)
.csv(path.toString());

最新更新