CombinePerKey
![]() |
組合集合中每個鍵的所有元素。
請參閱 Beam 程式設計指南 中的更多資訊。
範例
在以下範例中,我們建立一個包含產品 PCollection
的管線。然後,我們以多種方式應用 CombinePerKey
來組合 PCollection
中的所有元素。
CombinePerKey
接受一個函式,該函式將一個值列表作為輸入,並為每個鍵組合這些值。
範例 1:使用預定義的函式組合
我們使用函式 sum
,它會接受一個數字的 iterable
並將它們加在一起。
範例 2:使用函式組合
我們定義一個函式 saturated_sum
,它會接受一個數字的 iterable
並將它們加在一起,直到達到預定義的最大數字。
範例 3:使用 Lambda 函式組合
我們也可以使用 Lambda 函式來簡化範例 2。
範例 4:使用多個引數組合
您可以將具有多個引數的函式傳遞給 CombinePerKey
。它們會作為額外的位置引數或關鍵字引數傳遞給該函式。
在此範例中,Lambda 函式會接受 values
和 max_value
作為引數。
範例 5:使用 CombineFn
組合
組合元素更一般且最彈性的方式是使用繼承自 CombineFn
的類別。
CombineFn.create_accumulator()
:這會建立一個空的累加器。例如,總和的空累加器會是0
,而乘積(乘法)的空累加器會是1
。CombineFn.add_input()
:每個元素會呼叫一次。接受一個累加器和一個輸入元素,將它們組合並傳回更新的累加器。CombineFn.merge_accumulators()
:可以並行處理多個累加器,因此此函式有助於將它們合併為單一累加器。CombineFn.extract_output()
:它允許在擷取結果之前執行額外計算。
相關轉換
您可以使用以下組合器轉換
另請參閱 GroupBy,它允許您一次組合多個欄位。
![]() |
上次更新時間:2024/10/31
您是否找到您要尋找的所有內容?
這一切都有用且清楚嗎?有什麼您想變更的嗎?請告訴我們!