gpt4 book ai didi

java - 如何在spark(java)中合并两个具有不同架构的 Parquet 文件

转载 作者:行者123 更新时间:2023-12-03 08:17:18 25 4
gpt4 key购买 nike

我有 2 个具有不同列数的 Parquet 文件,并尝试将它们与以下代码片段合并

Dataset<Row> dataSetParquet1 = testSparkSession.read().option("mergeSchema",true).parquet("D:\\ABC\\abc.parquet");

Dataset<Row> dataSetParquet2 = testSparkSession.read().option("mergeSchema",true).parquet("D:\\EFG\\efg.parquet");

dataSetParquet1.unionByName(dataSetParquet2);
// dataSetParquet1.union(dataSetParquet2);


对于 unionByName() 我收到错误:

Caused by: org.apache.spark.sql.AnalysisException: Cannot resolve column name

对于 union() 我收到错误:

Caused by: org.apache.spark.sql.AnalysisException: Union can only be performed on tables with the same number of columns, but the first table has 7 columns and the second table has 6 columns;;

如何在java中使用spark合并这些文件?

更新:示例

数据集1:

epochMillis   | one | two | three| four
--------------------------------------
1630670242000 | 1 | 2 | 3 | 4
1630670244000 | 1 | 2 | 3 | 4
1630670246000 | 1 | 2 | 3 | 4

数据集2:

epochMillis   | one | two | three|five
---------------------------------------
1630670242000 | 11 | 22 | 33 | 55
1630670244000 | 11 | 22 | 33 | 55
1630670248000 | 11 | 22 | 33 | 55

合并后的最终数据集:

epochMillis   | one | two | three|four |five
--------------------------------------------
1630670242000 | 11 | 22 | 33 |4 |55
1630670244000 | 11 | 22 | 33 |4 |55
1630670246000 | 1 | 2 | 3 |4 |null
1630670248000 | 11 | 22 | 33 |null |55

如何获得合并两个数据集的结果?

最佳答案

您可以使用 mergeSchema 选项,并在 parquet 方法中添加要合并的 parquet 文件的所有路径,如下所示:

Dataset<Row> finalDataset = testSparkSession.read()
.option("mergeSchema", true)
.parquet("D:\\ABC\\abc.parquet", "D:\\EFG\\efg.parquet");

第一个数据集中存在但第二个数据集中不存在的所有列都将在第二个数据集中设置为 null

关于java - 如何在spark(java)中合并两个具有不同架构的 Parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68939377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com