как объединить кадры данных с похожими значениями и несколькими ключами / scala - PullRequest
0 голосов
/ 21 марта 2019

У меня проблемы с получением следующей таблицы. Первые две таблицы - это мои исходные таблицы, к которым я хотел бы присоединиться. третья таблица - это то, как я хотел бы иметь ее.

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

Я использовал следующее соединение:

val df_result = df_1.join(df_2, Seq("ID", "date"), "outer")

df
+----+-----+-----------+
|ID  |def_a| date      |
+----+-----+-----------+
|  01|    1| 2019-01-31|
|  02|    1| 2019-12-31| 
|  03|    1| 2019-11-30|
|  01|    1| 2019-10-31|

df
+----+-----+-----+-----------+
|ID  |def_b|def_c|date       |
+----+-----+-----+-----------+
|  01|    1|    0| 2017-01-31| 
|  02|    1|    1| 2019-12-31| 
|  03|    1|    1| 2018-11-30| 
|  03|    0|    1| 2019-11-30| 
|  01|    1|    1| 2018-09-30|
|  02|    1|    1| 2018-08-31|
|  01|    1|    1| 2018-07-31|

result
+----+-----+-----+-----+-----------+
|ID  |def_a|def_b|deb_c|date       |
+----+-----+-----+-----+-----------+
|  01|    1|    0|    0| 2019-01-31| 
|  02|    1|    1|    1| 2019-12-31| 
|  03|    1|    0|    1| 2019-11-30| 
|  01|    1|    0|    0| 2019-10-31| 
|  01|    0|    1|    0| 2017-01-31| 
|  03|    0|    1|    1| 2018-11-30| 
|  01|    0|    1|    1| 2018-09-30| 
|  02|    0|    1|    1| 2018-08-31|
|  01|    0|    1|    1| 2018-07-31|

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 27 марта 2019

Надеюсь, что следующий код будет полезен -

df_result
    .groupBy("ID", "date")
    .agg(
        max("a"),
        max("b"),
        max("c")
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...