Spark文件格式转义\ n加载CSV

时间:2018-08-09 17:40:24

标签: csv apache-spark apache-spark-sql

我正在使用Spark读取CSV管道定界数据文件。报价合格。文本块中带有/ n,这会导致读取损坏。我不明白的是,它引用的是限定文字,所以肯定应该跳过它!这些行本身以CR + LN分隔。

反正不是。我该如何解决?我可以从提取物中清除它们,但对我来说似乎并不优雅。

这就是我用来加载数据的内容

val sch = spark.table("db.mytable").schema
val df = spark.read
  .format("csv")
  .schema(sch)
  .option("header", "true")
  .option("delimiter", "|")
  .option("mode", "PERMISSIVE")
  .option("quote", "\"")
  .load("/yadaydayda/mydata.txt")

2 个答案:

答案 0 :(得分:0)

首先在提取物中对它们进行剥离,从而解决了这一问题。但是,我最终确定的解决方案是在提取中使用木地板格式,然后所有这些问题都消失了。

答案 1 :(得分:0)

很高兴知道我不是在Spark中处理此问题的唯一人!

Spark逐行读取文件,因此其中包含换行符的CSV会导致解析器出现问题。逐行读取使Spark可以更轻松地处理大型CSV文件,而不是尝试解析所有内容以获取引号,这将严重损害案例的性能,而当尝试将其设置为高时则更可能不是问题。性能分析。

对于我知道可能存在换行符的情况,我使用了第三方CSV解析库,通过它运行CSV“行”(它将正确处理换行符),剥离换行符,写入/缓存文件某个位置,然后从该缓存文件中读取。对于生产用例,可以将这些文件加载​​到数据库中,或者用于日志文件或某些您不希望在数据库中使用的文件,可以像您建议的那样使用Parquet很好地工作,或者实际上只是在某些地方强制缺少换行符在文件到达Spark之前。