连接不均匀的列

时间:2019-08-09 13:45:20

标签: pyspark

我有两个数据帧,其结构如下:

|来源| #Users | #Clicks |小时|类型

类型|总数#用户|小时

我想基于小时加入这些列,但是第一个数据框在第二个中具有更深的粒度,因此具有更多的行。基本上我想要一个我拥有的数据框

|来源| #Users | #Clicks |小时|类型|总#个用户

其中#个用户总数来自第二个数据帧。有什么建议么?我想我可能想使用地图?

编辑:

这是一个例子

DF1

|Source|#Users|#Clicks|Hour|Type 
|Prod1 |50    |3      |01  |Internet
|Prod2 |10    |2      |07  |iOS
|Prod3 |1     |50     |07  |Internet
|Prod2 |3     |2      |07  |Internet
|Prod3 |8     |2      |05  |Internet

DF2

|Type    |Total #Users|Hour
|Internet|100         |01
|iOS     |500         |01
|Internet|300         |07
|Internet|15          |05
|iOS     |20          |07

结果

|Source|#Users|#Clicks|Hour|Type    |Total #Users
|Prod1 |50    |3      |01  |Internet|100
|Prod2 |10    |2      |07  |iOS     |20
|Prod3 |1     |50     |07  |Internet|300
|Prod2 |3     |2      |07  |Internet|300
|Prod3 |8     |2      |05  |Internet|15

1 个答案:

答案 0 :(得分:2)

这是您要尝试的左连接:

df1.join(df2, (df1.Hour === df2.Hour) & (df1.Type === df2.Type), "left_outer")

简短版本:左连接保留df1中的所有行,如果匹配则以df2的匹配行为条件进行连接(如果不匹配则为null,如果多个匹配则重复)。

More info on Pyspark join
More info on SQL Joins types