【发布时间】:2020-01-30 22:45:50
【问题描述】:
我正在使用 java 编写 spark 代码,在加入条件之后,我们得到了多条记录,因为在不同的来源中有重复的 IDs,(ID 是重复的,但某些属性已更改)所以使用相同的 id 我们有多个记录.我需要的是将哪些重复记录合并到每个ID的单个唯一行上
输入数据集
+---+---+---+----+---+---+
|id |b |c |d |f |g |
+---+---+---+----+---+---+
|1 |e |dd |ddd |34 |r5t|
|1 |e |dd2|ddd |34 |r5t|
|1 |e |dd3|ddd |34 |rt |
|2 |e |dd |ddd1|34 |5rt|
|4 |e |dd |ddd1|34 |rt |
|1 |e |dd4|ddd |34 |rt |
|4 |e |dd4|ddd |34 |rt |
|4 |e |dd4|ddd |3 |rt |
|2 |e |dd |ddd |3 |r5t|
|2 |e |dd |ddd |334|rt |
+---+---+---+----+---+---+
预期输出
+---+--------------+--------------+--------------+-------------------+--------------+
|id |f | b | g|d |d |
+---+--------------+--------------+--------------+-------------------+--------------+
|1 |[34] |[e] |[r5t, rt] |[dd4, dd3, dd2, dd]|[ddd] |
+---+--------------+--------------+--------------+-------------------+--------------+
我尝试如下明确给出collect_list
df.groupBy("id").agg(
functions.collect_set("f"),
functions.collect_set("b")
).show(1,false);
但我的情况是我们有 300 列,在数据集中,列可能不一样,有时会发生变化。
【问题讨论】:
标签: java apache-spark aggregate-functions