如何加载包含损坏列的CSV数据集?

时间:2016-10-21 14:47:52

标签: csv apache-spark

我已将客户端数据库导出到csv文件,并尝试使用以下命令将其导入Spark:

spark.sqlContext.read
  .format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load("table.csv")

在做了一些验证之后,我发现有些ID是null,因为列有时会有回车符。并且这会使所有下一个列脱臼,产生多米诺骨牌效应,破坏所有数据。

奇怪的是,在调用printSchema时,生成的表结构很好。

如何解决问题?

2 个答案:

答案 0 :(得分:3)

你似乎很幸运inferSchema它运行正常(因为它只读取少量记录来推断架构),所以printSchema会给你一个正确的结果。

由于CSV导出文件已损坏,并且假设您要使用Spark处理文件(例如,根据其大小),请使用textFile读取它并修复ID。将其另存为CSV格式并加载回来。

答案 1 :(得分:0)

我不确定你使用的是什么版本的火花,但是从2.2(我相信)开始,有一个多线路'可用于将字段保持在一起的选项,其中包含换行符。从我读过的其他一些内容中,您可能需要应用一些引用和/或转义字符选项,以使其按照您的需要运行。

spark.read
  .csv("table.csv")
  .option("header", "true")
  .option("inferSchema", "true")
  **.option("multiLine", "true")**