【发布时间】:2021-09-29 04:39:16
【问题描述】:
我有 2 个 Pyspark 数据帧
数据框 1 - df 列是 customer_id, address_id, order_id, date the order was placed, order_share
+----+----+--------+----------+-----------+
|c_id|a_id|order_id|order_date|order_share|
+----+----+--------+----------+-----------+
| c1| a1| 1|2021-01-23| 0.5|
| c1| a2| 1|2021-01-23| 0.2|
| c1| a3| 1|2021-01-23| 0.3|
| c2| a5| 2|2021-03-20| 0.4|
| c2| a6| 2|2021-03-20| 0.6|
| c1| a1| 3|2021-02-20| 0.3|
| c1| a2| 3|2021-02-20| 0.3|
| c1| a3| 3|2021-02-20| 0.4|
+----+----+--------+----------+-----------+
数据框 2 - df_address 列是 customer_id, address_id, the date of address creation
+----+----+------------+
|c_id|a_id|created_date|
+----+----+------------+
| c1| a1| 2020-12-31|
| c1| a2| 2020-04-23|
| c1| a3| 2020-03-23|
| c1| a4| 2020-01-16|
| c2| a5| 2020-12-28|
| c2| a6| 2020-05-16|
| c2| a7| 2020-03-04|
+----+----+------------+
现在,我希望加入这两个表,以便对于 每个 order_id,我从 df_address 获取地址,并且对应的条目应该是 order_share 列中的 0.0 p>
我的输出应该是这样的
+----+----+------------+--------+----------+-----------+
|c_id|a_id|created_date|order_id|order_date|order_share|
+----+----+------------+--------+----------+-----------+
| c1| a1| 2020-12-31| 1|2021-01-23| 0.5|
| c1| a2| 2020-04-23| 1|2021-01-23| 0.2|
| c1| a3| 2020-03-23| 1|2021-01-23| 0.3|
| c1| a4| 2020-01-16| 1|2021-01-23| 0.0|
| c2| a5| 2020-12-28| 2|2021-03-20| 0.4|
| c2| a6| 2020-05-16| 2|2021-03-20| 0.6|
| c2| a7| 2020-03-04| 2|2021-03-20| 0.0|
| c1| a1| 2020-12-31| 3|2021-02-20| 0.3|
| c1| a2| 2020-04-23| 3|2021-02-20| 0.3|
| c1| a3| 2020-03-23| 3|2021-02-20| 0.4|
| c1| a4| 2020-01-16| 3|2021-02-20| 0.0|
+----+----+------------+--------+----------+-----------+
这看起来不像普通的左/右连接,我应该为每个 order_id 都这样做。
我尝试使用['c_id','a_id'] 加入,但输出与预期相差甚远。考虑到df_address 左边和df 右边,使用left join 给我order_id 和right join 的空值并没有给我来自df_address 的所有地址
看起来我必须为每个 order_id 应用某种 groupby,然后为每个组应用 join,但我不知道如何实现,甚至不知道这是否是正确的方法
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
什么阻止你加入
leftc_id和a_id -
请检查问题的编辑,我已经说明了我在使用左连接时遇到的问题
标签: python apache-spark join pyspark