Spark:使用PERMISSIVE和提供的架构读取文件-记录损坏列问题

时间:2019-01-21 16:45:36

标签: apache-spark apache-spark-sql

我正在读取Spark CSV。我为读取的文件提供了架构,并且读取了许可模式。我想将所有记录都保留在columnNameOfCorruptRecord中(在我的情况下为rupted_records)。

我经过艰辛的设置,仍然收到警告,说我无法抑制自己想念的东西。

因此,首先为了拥有“ rupted_records”列,我需要将其作为StringType添加到架构中。记录下来,这样还好。 但是,每当我读取文件时,都会收到一条警告,指出该模式不匹配,因为列数不同。这只是一个警告,但它填补了我的日志。

另外,当有一个不可为空的字段并且有一个损坏的记录时,损坏的记录将转到destroy_records列,并且其所有字段都设置为null,因为我有一个不可为空的字段,所以我得到了一个例外。解决此问题的唯一方法是将列不可为空设置为可为空。真是奇怪。

我想念什么吗?

回顾:

  1. 添加后是否可以忽略警告 架构
  2. 中的destroyed_records列
  3. 有没有一种使用方法 具有模式的PERMISSIVE模式和destroyed_records列具有 不可为空的字段。

谢谢!

2 个答案:

答案 0 :(得分:1)

读取json代码片段的演示

df= self.spark.read.option("mode", "PERMISSIVE").option("primitivesAsString", True).json(self.src_path)

答案 1 :(得分:0)

以下文档可能会有所帮助。如果您至少提供自己编写的代码,那将是很好的。 https://docs.databricks.com/spark/latest/data-sources/read-csv.html