CSV解析嵌套引号

时间:2016-03-16 16:25:09

标签: csv apache-spark apache-commons

我尝试使用apache sparks CSV阅读器解析一个相当复杂的CSV,它内部依赖于apache commons库(https://github.com/databricks/spark-csv)。

我尝试了不同的组合 quoteModeescape,但无法让它工作,例如防止例外。您是否有任何提示哪些参数可以支持这种嵌套结构?

 ERROR CsvRelation$: Exception while parsing line: "Gabriella's Song" From The Motion Picture "The Mission"; 
java.io.IOException: (line 1) invalid char between encapsulated token and delimiter

我知道sed可用于预处理数据。但是,如果将其集成到Spark中,那就太棒了。如果不需要进一步的预处理。我没有找到指定正则表达式的可能性。

CSV文件如下所示:

"Gabriella's Song" From The Motion Picture "The Mission";

2 个答案:

答案 0 :(得分:0)

这与https://github.com/databricks/spark-csv/issues/295

有关

一些更特殊的领域,比如

&
Or "Eccoli; attenti ben (Don Pasquale)"

导致这些问题。我们将为Apache Camel编写自己的CSV预处理器。

答案 1 :(得分:0)

尝试一下,对我来说效果很好-

HDFS file -
spark.read.option("WholeFile", true).option("delimiter", ",").csv(s"hdfs://{my-hdfs-file-path}")

Non-HDFS file -
spark.read.option("WholeFile", true).option("delimiter", ",").csv(my-hdfs-file-path)

以上方法适用于任何定界文件,只需更改定界符值即可。

您也可以使用正则表达式,但是对于大文件来说效率很低。

希望这会有所帮助。