1
您好我有一個表,看起來像如何使用GroupByKey在星火計算非線性GROUPBY任務
Time ID Value1 Value2
1 a 1 4
2 a 2 3
3 a 5 9
1 b 6 2
2 b 4 2
3 b 9 1
4 b 2 5
1 c 4 7
2 c 2 0
這裏的任務和要求:
我要設置列ID作爲關鍵,不是列時間,但我不想刪除列時間。 Spark中有沒有設置主鍵的方法?
聚合函數是非線性的,這意味着你不能使用「reduceByKey」。在計算之前,所有數據都必須混合到一個節點。例如,聚合函數可能看起來像總數值的根N,其中N是每個ID的記錄數(計數):
output = root(sum(value1),count())+ root (總和(值2),計數())
要清楚,對於ID = 「A」,聚集的輸出值應該是
output = root(1 + 2 + 5, 3) + root(4 + 3 + 9, 3)
後3是因爲我們3記錄一個。對於ID ='b',它是:
output = root(6 + 4 + 9 + 2, 4) + root(2 + 2 + 1 + 5, 4)
該組合是非線性的。因此,爲了獲得正確的結果,具有相同「ID」的所有數據必須在一個執行器中。
我在Spark 2.0中選中了UDF或Aggregator。根據我的理解,他們都假設爲「線性組合」
有沒有辦法處理這種非線性組合計算?特別是,利用Spark的並行計算的優勢?
你可以做一個reduceByKey,產生的總和,和該值的計數,然後執行根(Σ, [count])就可以了,不是嗎? –