如何基于分组实现PySpark DataFrame关联,补全每个订单对应全量地址的订单占比
解决方案
实现思路
- 首先从订单表
df中提取所有订单的唯一属性组合(c_id、order_id、order_date),每个订单对应唯一一条记录 - 将上述订单属性表和地址表
df_address通过c_id内连接,得到每个订单对应用户的全部地址组合,这一步解决了普通连接无法补全同一用户所有地址的问题 - 将得到的全量订单地址组合,和原订单表
df通过c_id、a_id、order_id、order_date四个字段左连接,匹配已有的order_share值 - 最后将
order_share字段的空值填充为0.0即可得到预期结果
PySpark 实现代码
# 1. 提取订单唯一维度信息 order_dim = df.select("c_id", "order_id", "order_date").distinct() # 2. 关联地址表得到每个订单对应的全量用户地址 order_address_full = order_dim.join(df_address, on="c_id", how="inner") # 3. 左关联原订单表获取order_share,空值填充为0.0 result = order_address_full.join( df, on=["c_id", "a_id", "order_id", "order_date"], how="left" ).fillna({"order_share": 0.0}) # 可选:按order_id、a_id排序,和样例输出顺序一致 result = result.sort("order_id", "a_id") # 查看结果 result.show()
内容的提问来源于stack exchange,提问作者Jitesh Malipeddi
相关产品推荐
相关产品推荐

