【问题标题】:How to fix inconsistent schemas in parquet file partition using Spark如何使用 Spark 修复 parquet 文件分区中的不一致模式
【发布时间】:2018-12-03 23:16:58
【问题描述】:

我是 spark 新手,在将新数据附加到分区时遇到了问题。我的管道使用 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

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

使用火花 2.3.1

谢谢。

【问题讨论】:

  • 如果您事先知道架构,则使用架构选项指定它并摆脱 inferschema 选项
  • 我这样做是为了更新数据,但我已经编写的文件呢?
  • 同样适用于旧文件,如果不是,您可以尝试使用类似 spark.read.parquet().with column("Ndc",$"Ndc".cast(Long type)) 的转换.

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


【解决方案1】:

您可以尝试两种选择。

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

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

【讨论】:

  • 是的,不幸的是,mergeSchema 选项失败了,所以我将开始循环遍历每个文件!
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 2018-10-04
  • 2017-12-02
  • 2016-02-06
  • 2015-01-27
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
相关资源
最近更新 更多