首页 > 解决方案 > 基于列合并两个火花数据框

问题描述

我有 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 行。所有数据应合并为一条记录,不得有任何重复列。

非常感谢

标签: pythonapache-sparkpysparkdatabricks

解决方案


你可以使用内连接

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

您也可以在最后应用 distinct 来删除重复项。

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

推荐阅读