如何将具有某些相似值和多个键/ scala的数据框联接在一起

时间:2019-03-21 08:14:21

标签: scala apache-spark-sql

我无法获取下表。前两个表是我想加入的源表。第三张桌子是我想要的。

我尝试了外部联接并使用了键“ ID”和“日期”,但结果与本示例不同。问题是,每个表中的某些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 :(得分:0)

希望以下代码会有所帮助—

df_result
    .groupBy("ID", "date")
    .agg(
        max("a"),
        max("b"),
        max("c")
        )