пересечение и объединение двух фреймов данных pyspark на основе общего столбца - PullRequest
0 голосов
/ 21 мая 2018

У меня есть два фрейма данных pyspark, A & B

A имеет два столбца date, symbol B имеет два столбца date2 entity

я просто хочу получить union и intersectionиз этих двух df на основе дат

, например, если df A как

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

заранее спасибо

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете воспользоваться функциями union и intersect для данных.После того, как вы union или intersect, последним шагом будет 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)

который должен дать вам

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

и для пересечения

#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]    |
+----------+-----------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...