基于列合并两个spark数据帧

2024-10-05 11:30:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,我需要合并基于一列(员工代码)。请注意,dataframe大约有75列,所以我提供了一个示例数据集来获取一些建议/示例解决方案。我使用的是databricks,数据集是从S3读取的。在

以下是我的两个数据帧:

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_代码的2个数据帧,基本上根据EMP_代码将dataframe1与dataframe2连接起来。当我做连接时,我得到了重复的列,我正在寻找一些帮助。在

预期的最终数据帧:

^{pr2}$

dataframe1中有3行emp_代码A10001,dataframe2中有1行。所有数据都应该合并为一条记录,没有任何重复的列。在

多谢了


Tags: 数据代码示例dataframecodecolumn1empcolumn2
3条回答

可以使用内部联接

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

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

^{pr2}$

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

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

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

^{pr2}$

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

如果两个df都有join key的列名,可以使用下面的代码

df1.join(df2, "EMP_CODE")

相关问题 更多 >

    热门问题