【问题标题】:Merging two parquet files with different schemas合并具有不同模式的两个镶木地板文件
【发布时间】:2018-09-06 15:45:31
【问题描述】:

我有两个 parquet 文件,Parquet A 有 137 列,Parquet B 有 110 列。 Parquet 一个文件具有该表的全部历史记录。因此 Parquet A 具有表的整个历史记录的所有字段。 Parquet B 是我今天提取的所有值,删除了 17 列。我想将镶木地板 A 与镶木地板 B 结合,但它们的列数不同。所以每次都会失败。

我尝试过 mergeSchema,但失败了。是否可以将缺少的列添加到镶木地板 B 并添加空值。那就结盟吧?

【问题讨论】:

标签: python dataframe parquet databricks


【解决方案1】:

我建议您将两个 parquet 文件作为数据帧加载到 Spark 中,并使用转换来匹配数据帧的架构。根据您的描述,听起来您希望 Parquet A(更大的表)进行转换,以使其与 Parquet B 的模式相匹配。 “drop”列功能是完成此 [docs]的直接方法。

这是我写的一个示例,其中镶木地板 A 有 5 列,实木复合地板 B 有 4 列。

显示两个表(数据框)的架构:

删除额外的列并创建两个表(数据框)的联合:

【讨论】:

  • 对不起,我想将 parquet A 中的列添加到 parquet B。我不想删除 parquet A 中的任何列。我不再拉这些字段,所以每个新的镶木地板 B 文件不会在镶木地板 A 上包含这些列。我只希望这些列为空。我不知道这些列是什么,所以我正在寻找一种方法来比较这两个镶木地板。如果镶木地板 B 缺少列,请添加列并进行联合。
  • 你能在下面的链接中检查这是你要找的吗?该帖子有答案 - 如何在火花中具有不同列数的两个 DataFrame 上执行联合。通过 pgm,您只需将所有缺失的列构建为空值,因为您不知道缺失的列是什么。 stackoverflow.com/questions/39758045/…
猜你喜欢
  • 1970-01-01
  • 2021-10-26
  • 2020-09-09
  • 2020-01-06
  • 2018-06-28
  • 2019-02-24
  • 2018-01-21
  • 2019-06-21
  • 2022-12-01
相关资源
最近更新 更多