簡體   English   中英

通過索引聚合RDD中的數組

[英]Aggregating arrays in an RDD by index

我有特定格式的數據,其中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的數組組合在一起,依此類推。

您可以使用分組依據運算符:

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))
)

如果您不希望鍵保留在值列表中,則可以使用mapValues映射值以將其刪除,如下所示:

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))
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM