Как сгруппировать объединенный фрейм данных, чтобы объединить одинаковые строки - PullRequest
0 голосов
/ 04 июня 2019

Я только что объединил два фрейма данных в pyspark, и вместо того, чтобы объединить строки с одинаковыми датами, он сложил их друг на друга следующим образом: df1 =

+----------+------------+--------------+
|      date| bounceCount|  captureCount|
+----------+------------+--------------+ 
|  20190518|           2|          null|
|  20190521|           1|          null|
|  20190519|           1|          null|
|  20190522|           1|          null|
+----------+------------+--------------+

df2 =

+----------+-------------+-------------+
|      date| captureCount|  bounceCount|
+----------+-------------+-------------+ 
|  20190516|         null|            3|
|  20190518|         null|            2|
|  20190519|         null|            1|
|  20190524|         null|            5|
+----------+-------------+-------------+

union =

+----------+------------+--------------+
|      date| bounceCount|  captureCount|
+----------+------------+--------------+ 
|  20190518|           2|          null|
|  20190521|           1|          null|
|  20190519|           1|          null|
|  20190522|           1|          null|
|  20190516|        null|             3|
|  20190518|        null|             2|
|  20190519|        null|             1|
|  20190524|        null|             5|
+----------+------------+--------------+

Я бы хотел сгруппировать его так, чтобы строки с одинаковыми датами объединялись с правильными значениями bounceCount и captureCount:

+----------+------------+--------------+
|      date| bounceCount|  captureCount|
+----------+------------+--------------+ 
|  20190518|           2|             2|
|  20190521|           1|          null|
|  20190519|           1|             1|
|  20190522|           1|          null|
|  20190516|        null|             3|
|  20190524|        null|             5|
+----------+------------+--------------+

Я пытался соединить их по-разному и сгруппировать фрейм данных по-разному, но я не могу понять это. Я также буду прикреплять этот фрейм данных с несколькими другими столбцами, поэтому я хотел бы знать, как лучше всего это сделать. Кто-нибудь знает простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Попробуйте это -

Соедините (полностью) оба кадра данных и используйте функцию coalesce .

from pyspark.sql.functions import coalesce

joining_condition = [df1.date == df2.date]

df1\
    .join(df2,joining_condition,'full')\
    .select(coalesce(df1.date,df2.date).alias('date')
            ,df1.bounceCount
            ,df2.bounceCount.alias('captureCount'))\
    .show()

#+--------+-----------+------------+
#|    date|bounceCount|captureCount|
#+--------+-----------+------------+
#|20190518|          2|           2|
#|20190519|          1|           1|
#|20190521|          1|        null|
#|20190524|       null|           5|
#|20190522|          1|        null|
#|20190516|       null|           3|
#+--------+-----------+------------+

Я думаю, что столбцы df2 кадра данных были взаимозаменяемы.Пожалуйста, проверьте.если это так, измените имена столбцов в решении.

0 голосов
/ 05 июня 2019

Этого можно добиться с помощью внешнего соединения.

df = (
    df1.select('date', 'bounceCount')
    .join(
        df2.select('date', 'captureCount'),
        on='data', how='outer'
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...