我有一个java POJO
class MyObj{
String id;
Map<KeyObj, ValueObj> mapValues;
//getters and //setters(omitted)
}我有一个spark数据集
Dataset<MyObj> myDs = .....我的数据集有一个值列表,但有重复的Ids。如何使用Spark groupBy组合重复的帐户Id并将键值对聚合到该Id的一个映射中。谢谢你的帮助。
所以我有:
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)]发布于 2021-02-26 04:31:14
您可以对原始映射执行explode操作,以便每个映射的每个条目都是它自己的一行。然后,您可以对id列进行分组并使用map_from_arrays恢复地图
myDs.select(col("id"),explode(col("mapValues"))) //1
.groupBy("id")
.agg(collect_list("key").as("keys"), collect_list("value").as("values")) //2
.withColumn("map", map_from_arrays(col("keys"), col("values"))) //3
.drop("keys", "values") //4
.show(false);将映射
key和valueid结果是
+----+------------------------------+
|id |map |
+----+------------------------------+
|1000|[D -> dfr, w -> wer, g -> gde]|
|1001|[v -> vsa, k -> khg] |
+----+------------------------------+https://stackoverflow.com/questions/66353190
复制相似问题