PySpark/SQL 加入非唯一键
Posted
技术标签:
【中文标题】PySpark/SQL 加入非唯一键【英文标题】:PySpark/SQL joining on non unique key 【发布时间】:2020-03-23 17:39:22 【问题描述】:我有两个需要加入的事务表;但是,这两个表之间没有明确的联系:
对于 t1,我有:
unique_id | date | units
对于 t2 我有:
unique_id | date | store_id | transaction_key
我想要的输出是根据 store_id 获得单位;但是,当我在 t1 上使用 unique_id 和日期进行左连接时,在某些情况下,客户在同一天进行了多次交易,这给了我交易密钥的重复。
添加了示例数据和输出:
表一和表二:
当前输出:
期望的输出:
【问题讨论】:
请提供样本数据和预期结果。 @GMB 嘿 GMB,已添加。感谢您对此的任何帮助。 是 SQL 查询的“当前输出”吗?如果是这样,读者可以在问题中看到它吗? 【参考方案1】:我认为您想要一个left join
,但将row_number()
作为匹配条件:
select t1.unique_id, t1.date, t1.units, t2.store_id, t2.transaction_key
from (
select t1.*, row_number() over(partition by unique_id, date order by units) rn
from table1 t1
) t1
left join (
select t2.*, row_number() over(partition by unique_id, date order by transaction_key) rn
from table2 t2
) t2
on t2.unique_id = t.unique_id and t2.date = t1.date and t2.rn = t1.rn
【讨论】:
以上是关于PySpark/SQL 加入非唯一键的主要内容,如果未能解决你的问题,请参考以下文章
pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别
PYSPARK:如何将带有多个 case 语句的 SQL 查询转换为 Pyspark/Pyspark-SQL?
在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe
从 pyspark.sql.types 导入行和从 pyspark.sql 导入行