如何使用 Spark 修复镶木地板文件分区中的不一致模式
How to fix inconsistent schemas in parquet file partition using Spark
我是 spark 的新手,我 运行 在将新数据附加到分区时遇到了问题。我的管道使用 Databricks 将每日 CSV 导入 Azure Datalake(基本上是 HDFS)。我还 运行 对数据进行了一些简单的 t运行 格式化并删除了重复项等。但是,我注意到有时 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
谢谢。
您可以尝试两种选择。
您 "mergeSchema" 合并两个具有不同架构的文件的选项 https://spark.apache.org/docs/2.3.1/sql-programming-guide.html#schema-merging
遍历每个单独的文件,在读取时使用 inferSchema,然后显式转换为通用模式并写回另一个位置
我是 spark 的新手,我 运行 在将新数据附加到分区时遇到了问题。我的管道使用 Databricks 将每日 CSV 导入 Azure Datalake(基本上是 HDFS)。我还 运行 对数据进行了一些简单的 t运行 格式化并删除了重复项等。但是,我注意到有时 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
谢谢。
您可以尝试两种选择。
您 "mergeSchema" 合并两个具有不同架构的文件的选项 https://spark.apache.org/docs/2.3.1/sql-programming-guide.html#schema-merging
遍历每个单独的文件,在读取时使用 inferSchema,然后显式转换为通用模式并写回另一个位置