如何使用Spark修复Parquet文件分区中的不一致模式

时间:2018-12-03 23:16:59

标签: apache-spark pyspark azure-data-lake databricks azure-databricks

我是火花新手,将新数据附加到分区时遇到问题。我的管道使用Databricks将每日CSV导入Azure Datalake(主要是HDFS)。我还对数据进行了一些简单的转换,并删除了重复项等。但是,我注意到有时inferSchema=True选项并不总是最好的,有时会在分区文件之间的模式中产生不一致。然后,当我去阅读所有文件时:

df = sqlContext.read.parquet("path/to/directory")

我被打中了:

Parquet column cannot be converted in file path/to/directory/file
Column: [Ndc], Expected: LongType, Found: BINARY

我有大量的分区文件,仔细检查每个文件是否架构相同,修复每个文件可能效率不高。是否有一种简单的方法来强制执行一个架构,所有文件都将转换为该架构,或者您实际上必须遍历每个镶木文件并更改架构?

使用spark 2.3.1

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以尝试两种选择。

  1. 您的“ mergeSchema”选项可以合并两个具有不同架构https://spark.apache.org/docs/2.3.1/sql-programming-guide.html#schema-merging

  2. 的文件
  3. 遍历每个单独的文件,在读取时使用inferSchema,然后显式强制转换为通用模式并写回另一个位置