根据列合并两个火花数据框

新手上路,请多包涵

我有 2 个数据框,我需要根据列(员工代码)合并它们。请注意,数据框大约有 75 列,因此我提供了一个示例数据集以获得一些建议/示例解决方案。我正在使用数据块,数据集是从 S3 读取的。

以下是我的 2 个数据框:

 DATAFRAME - 1

|-----------------------------------------------------------------------------------|
|EMP_CODE   |COLUMN1|COLUMN2|COLUMN3|COLUMN4|COLUMN5|COLUMN6|COLUMN7|COLUMN8|COLUMN9|
|-----------------------------------------------------------------------------------|
|A10001     |   B   |       |       |       |       |       |       |       |       |
|-----------------------------------------------------------------------------------|

DATAFRAME - 2
|-----------------------------------------------------------------------------------|
|EMP_CODE   |COLUMN1|COLUMN2|COLUMN3|COLUMN4|COLUMN5|COLUMN6|COLUMN7|COLUMN8|COLUMN9|
|-----------------------------------------------------------------------------------|
|A10001     |       |       |       |       |   C   |       |       |       |       |
|B10001     |       |       |       |       |       |       |       |       |T2     |
|A10001     |       |       |       |       |       |       |       |   B   |       |
|A10001     |       |       |   C   |       |       |       |       |       |       |
|C10001     |       |       |       |       |       |   C   |       |       |       |
|-----------------------------------------------------------------------------------|

我需要合并基于 EMP_CODE 的 2 个数据帧,基本上是基于 emp_code 将 dataframe1 与 dataframe2 连接起来。当我进行连接时,我得到了重复的列,我正在寻求帮助。

预期的最终数据框:

 |-----------------------------------------------------------------------------------|
|EMP_CODE   |COLUMN1|COLUMN2|COLUMN3|COLUMN4|COLUMN5|COLUMN6|COLUMN7|COLUMN8|COLUMN9|
|-----------------------------------------------------------------------------------|
|A10001     |   B   |       |   C   |       |   C   |       |       |   B   |       |
|B10001     |       |       |       |       |       |       |       |       |T2     |
|C10001     |       |       |       |       |       |   C   |       |       |       |
|-----------------------------------------------------------------------------------|

dataframe1 中有 3 行 emp_code A10001,dataframe2 中有 1 行。所有数据应合并为一条记录,没有任何重复列。

非常感谢

原文由 Yuva 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 362
2 个回答

首先,您需要聚合各个数据帧。

 from pyspark.sql import functions as F
df1 = df1.groupBy('EMP_CODE').agg(F.concat_ws(" ", F.collect_list(df1.COLUMN1)))

您必须为所有列和所有数据框编写此代码。然后你必须在所有数据帧上使用 union 函数。

 df1.union(df2)

然后在该联合数据帧上重复相同的聚合。

原文由 Abhishek Velankar 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以使用内部连接

output = df1.join(df2,['EMP_CODE'],how='inner')

您也可以在末尾应用 distinct 来删除重复项。

 output = df1.join(df2,['EMP_CODE'],how='inner').distinct()

原文由 Abhishek Velankar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题