scala—按索引聚合rdd中的数组

fcg9iug3  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(637)

我有特定格式的数据,其中rdd中的每个元素都是一个数组。数组中的第一个元素是键,其后的两个元素是与该键关联的值。如何通过第一个数组索引聚合这些值?
这是一个示例输入:

Array[Array[Any]] = Array(Array(490, [490], 23225), Array(64, [64], 48262), Array(64, [64,11], 30677), Array(64, [64,11,6], 29865), Array(64, [64,3], 21175), Array(64, [64,6], 39697), Array(6, [6], 601374), Array(77, [77], 43454), Array(77, [77,11], 30409), Array(77, [77,11,6], 29830), Array(77, [77,6], 37654), Array(3, [3], 450031), Array(3, [3,6], 265180), Array(69, [69], 22631), Array(69, [69,6], 20439), Array(11, [11], 364065), Array(11, [11,3], 161286), Array(11, [11,3,6], 143682), Array(11, [11,6], 324013), Array(90, [90], 22062), Array(90, [90,6], 21288), Array(2, [2], 42927), Array(2, [2,11], 20826), Array(2, [2,6], 29619), Array(215, [215], 21592), Array(138, [138], 35127), Array(138, [138,11], 21566), Array(138, [138,11,6], 21008), Array(138, [138,6], 28750), Array(1, [...

我希望所有具有键490的数组都被分组在一起,而具有键64的数组被分组在一起,以此类推。

pgx2nnw8

pgx2nnw81#

您可以使用“分组依据”运算符: arr.groupBy(_.head) 或长形 arr.groupBy(innerArr => innerArr.head) ```
Array(Array(400, "sad", "sd"), Array(300, "aa", "sd"), Array(400, "dsa", "asd"))
.groupBy(_.head)
res0: Map[Any, Array[Array[Any]]] = Map(
400 -> Array(Array(400, sad, sd), Array(400, dsa, asd)),
300 -> Array(Array(300, aa, sd))
)

如果不希望键保留在值列表中,可以使用mapvaluesMap这些值以删除它们,如下所示:

arr.groupBy(.head)
.mapValues(
.map(_.tail))
res1: Map[Any, Array[Array[Any]]] = Map(
400 -> Array(Array(sad, sd), Array(dsa, asd)),
300 -> Array(Array(aa, sd))
)

相关问题