簡體   English   中英

Apache Flink:如何在ReduceFunction中訪問廣播變量?

[英]Apache Flink: How to access a broadcast variable in a ReduceFunction?

我有一個只有一個條目的DataSet。 我需要在reduce函數中使用這個值(閾值)。 flink文檔顯示了如何使用以下方法將數據集廣播到地圖函數:

data.map.withBroadcastSet(dataSetToBroadcast, "broadcastSetName");

並使用以下命令在map函數中訪問它:

@Override
public void open() {
  Collection<Integer> broadcastSet = getRuntimeContext().getBroadcastVariable("broadcastSetName");
}

看來這僅適用於RichMapFunctions,但我想在Reduce函數中訪問此廣播變量。 當我在我的reduce函數中編寫open函數時,出現錯誤“ Method不會從其超類重寫method”。

我知道在縮小之前我可以在map函數內部接收廣播,但是隨后我必須將其添加到數據集中的每個條目中,這是開銷。 我也正在使用flatMapFunction,其中也不存在打開功能。

我也不想.collect我的一個值,以將其傳遞給reduce函數。

有人知道在reduce函數中可訪問我的一個值的另一種方法嗎? 謝謝

廣播集通過RuntimeContext訪問。 可以通過調用RichFunction.getRuntimeContext()獲得RuntimeContext

Flink為大多數功能接口(包括RichReduceFunction提供了“豐富的”變體。

只需實現RichReduceFunction訪問RuntimeContext所有功能。

暫無
暫無

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

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