Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于公共列的两个pyspark数据帧的交并_Python_Apache Spark_Pyspark - Fatal编程技术网

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

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| +----------+------

我有两个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作为:

+----------+-------------+
|       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匹配。