我有2个数据框,需要根据一个列(员工代码)进行合并。请注意,数据框大约有75列,因此我提供了一个样本数据集,以获取一些建议/样本解决方案。我正在使用数据块,并且从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_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 | | | |
|-----------------------------------------------------------------------------------|
在数据帧1中有3行,其emp_code为A10001,在数据帧2中有1行。所有数据应合并为一条记录,而没有任何重复的列。
非常感谢
答案 0 :(得分:1)
如果两个df都有连接键的某些列名称,则可以使用以下代码
df1.join(df2, "EMP_CODE")
答案 1 :(得分:1)
您可以使用内部联接
output = df1.join(df2,['EMP_CODE'],how='inner')
您还可以在末尾应用“ distinct”来删除重复项。
output = df1.join(df2,['EMP_CODE'],how='inner').distinct()
答案 2 :(得分:0)
首先,您需要汇总各个数据框。
from pyspark.sql import functions as F
df1 = df1.groupBy('EMP_CODE').agg(F.concat_ws(" ", F.collect_list(df1.COLUMN1)))
您必须为所有列和所有数据框编写此代码。 然后,您必须在所有数据帧上使用联合函数。
df1.union(df2)
,然后在该联合数据帧上重复相同的聚合。
答案 3 :(得分:0)
如果两个数据框的列相同,则可以在scala中完成
output = df1.union(df2)
答案 4 :(得分:0)
您需要的是工会。
如果两个数据框的列数相同,并且要进行“联合”的列在位置上相同(如您的示例中所示),这将起作用:
output = df1.union(df2).dropDuplicates()
如果两个数据框具有相同数量的列,并且需要“联合”的列具有相同的名称(如您的示例中所示),那会更好:
output = df1.unionByName(df2).dropDuplicates()