我有一个 java 波乔
class MyObj{
String id;
Map<KeyObj, ValueObj> mapValues;
//getters and //setters(omitted)
}
我有Spark
Dataset<MyObj> myDs = .....
我的数据集有一个值列表,但有重复的ID。如何使用spark groupby组合重复的帐户id并将键值对聚合到该id的一个Map中。谢谢你的帮助。
所以我有:
ID. Map
----------------------------------
1000 [(w -> wer), (D -> dfr)]
1000 [(g -> gde)]
1001 [(k -> khg), (v -> vsa)]
我需要这个:
ID. Map
----------------------------------
1000 [(w -> wer), (D -> dfr), (g -> gde)]
1001 [(k -> khg), (v -> vsa)]
1条答案
按热度按时间t2a7ltrp1#
可以分解原始Map,使每个Map的每个条目都是自己的一行。然后你就可以分组了
id
列并从\u数组还原带有map \u的Map:将Map分解成单行。新列名将
key
以及value
按分组时id
将所有键和值收集到数组中,生成一个包含键的数组和一个包含每个键的值的数组id
使用来自\数组的Map\将键和值数组转换回单个Map放下中间柱
结果是