1
我有以下結構的RDD(RDD[(String,Map[String,List[Product with Serializable]])]
):計數唯一值
這是一個樣的數據:
(600,Map(base_data -> List((10:00 01-08-2016,600,111,1,1), (10:15 01-08-2016,615,111,1,5)), additional_data -> List((1,2)))
(601,Map(base_data -> List((10:01 01-08-2016,600,111,1,2), (10:02 01-08-2016,619,111,1,2), (10:01 01-08-2016,600,111,1,4)), additional_data -> List((5,6)))
我想要計算的唯一值的數量子列表中的第4個字段。例如,讓我們先看看第一個條目。該列表是List((10:00 01-08-2016,600,111,1,1), (10:15 01-08-2016,615,111,1,5))
。它在子列表的第4個字段中包含2個唯一值(1
和5
)。
至於第二項,它還包含2個唯一值(2
和4
),因爲2
重複兩次。
生成的RDD格式應該是RDD[Map[String,Any]]
。
我嘗試如下解決這個任務:
val result = myRDD.map({
line => Map(("id",line._1),
("unique_count",line._2.get("base_data").groupBy(l => l).count(_))))
})
但是這個代碼不去做什麼,我需要。事實上,我不知道如何正確地表明我想按第4個字段進行分組...
它說'java.lang.IndexOutOfBoundsException:4'。據我瞭解,'bd.productElement(4)'實際上訪問第4個子列表,而不是每個列表中的第4個字段...... Strage – GangsterMaur
也許應該有像'map(t => t.map R => r.productElement(4)))。toSet.size'? – GangsterMaur
'line._2(「base_data」)'返回'Product with Serializable'的'List'。 '.map'迭代此列表中的每個項目。 'bd'是一個'Product with Serializable',用'(10:01 01-08-2016,600,111,1,2)''表示的值',對吧?不確定我們需要更深入地應用「地圖」。順便說一句,你確定列表中的所有項目具有相同的長度和結構? ('IndexOutOfBoundsException'讓我覺得事實並非如此) – Antot