Python 基于公共列的两个pyspark数据帧的交并
我有两个pyspark数据帧,A和B A有两列Python 基于公共列的两个pyspark数据帧的交并,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有两个pyspark数据帧,A和B A有两列日期,符号 B有两列date2实体 我只想根据日期得到这两个df的并集和交集 例如,如果DFA为 +----------+------+ | date|symbol| +----------+------+ |2013-08-30| A| |2013-08-30| AAL| |2013-08-30| AAP| |2013-08-30| AAPL| |2013-08-30| ABBV| +----------+------
日期,符号
B有两列date2实体
我只想根据日期得到这两个df的并集
和交集
例如,如果DFA为
+----------+------+
| date|symbol|
+----------+------+
|2013-08-30| A|
|2013-08-30| AAL|
|2013-08-30| AAP|
|2013-08-30| AAPL|
|2013-08-30| ABBV|
+----------+------+
和B作为:
+----------+-------------+
| day|entity_ticker|
+----------+-------------+
|2013-08-30| A|
|2013-08-30| AAL|
|2013-08-30| AAP|
|2013-08-30| AAPL|
|2013-08-30| ABC|
+----------+-------------+
我只想和你一样
+----------+--------------------------------+
| dd |union_of_sybols |
+----------+--------------------------------+
|2013-08-30| [A,AAL,AAP,AAPL,ABBV,ABC]|
+----------+--------------------------------+
和交叉口为:
+----------+--------------------------------+
| dd |intersection_of_sybols |
+----------+--------------------------------+
|2013-08-30| [A,AAL,AAP,AAPL] |
+----------+--------------------------------+
提前感谢您可以从数据帧的
联合
和相交
功能中获益。在union
或intersect
之后,最后一步是groupBy
并使用collect\u 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)
应该给你什么
+----------+------------------------------+
|dd |union_of_symbols |
+----------+------------------------------+
|2013-08-30|[AAL, AAP, ABC, A, AAPL, ABBV]|
+----------+------------------------------+
+----------+-----------------------+
|dd |intersection_of_symbols|
+----------+-----------------------+
|2013-08-30|[AAL, AAP, A, AAPL] |
+----------+-----------------------+
交叉口
#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 |union_of_symbols |
+----------+------------------------------+
|2013-08-30|[AAL, AAP, ABC, A, AAPL, ABBV]|
+----------+------------------------------+
+----------+-----------------------+
|dd |intersection_of_symbols|
+----------+-----------------------+
|2013-08-30|[AAL, AAP, A, AAPL] |
+----------+-----------------------+
你试过什么吗?请把这些分享给我们well@RameshMaharjan,只是有点困惑,我应该如何继续,比如我应该用sql(速度很慢)还是加入数据帧(没有得到我想要的结果),所以我正在寻找解决方案,我自己也找不到。包括你已经尝试过的。我正在研究解决方案。你能帮我解释一下日常生活中的日常生活吗?你能解释一下吗?是的,我只是想了解一下联合和交叉路口的背景功能。我的意思是它如何检测A中的
date
和B中的day
是它需要使用的公共数据帧。spark将第二个数据帧重命名为第一个数据帧。顺序和列号应与thoughLet us匹配。