基于公共列的两个pyspark数据帧的交集和并集

2024-10-01 11:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个pyspark数据帧,A&B

A有两列date, symbol B有两列date2 entity

我只想根据日期得到这两个df的union和{}

例如,如果DFA

+----------+------+
|      date|symbol|
+----------+------+
|2013-08-30|     A|
|2013-08-30|   AAL|
|2013-08-30|   AAP|
|2013-08-30|  AAPL|
|2013-08-30|  ABBV|
+----------+------+

B为:

^{pr2}$

我只想联合

+----------+--------------------------------+
|       dd |union_of_sybols                 |
+----------+--------------------------------+
|2013-08-30|            [A,AAL,AAP,AAPL,ABBV,ABC]|
+----------+--------------------------------+

交叉点为:

+----------+--------------------------------+
|       dd |intersection_of_sybols          |
+----------+--------------------------------+
|2013-08-30|            [A,AAL,AAP,AAPL]    |
+----------+--------------------------------+

提前谢谢


Tags: of数据dfdatesymbolddpysparkentity
1条回答
网友
1楼 · 发布于 2024-10-01 11:19:33

您可以从unionintersect函数中获益。在unionintersect之后,最后一步是groupBy,并使用collect_set内置函数作为聚合

为了工会

from pyspark.sql import functions as f
#union of two dataframes
A.union(B).groupBy(f.col('date').alias('dd')).agg(f.collect_set('symbol').alias('union_of_symbols')).show(truncate=False)

它应该给你

^{pr2}$

交叉口呢

#intersection of two dataframes
A.intersect(B).groupBy(f.col('date').alias('dd')).agg(f.collect_set('symbol').alias('intersection_of_symbols')).show(truncate=False)

它应该给你

+     +           -+
|dd        |intersection_of_symbols|
+     +           -+
|2013-08-30|[AAL, AAP, A, AAPL]    |
+     +           -+

相关问题 更多 >