我有一个带有一个条目的数据集。这个值(一个阈值)我需要在减少功能中。Flink文档显示了如何将数据集广播到地图功能:
data.map.withBroadcastSet(dataSetToBroadcast, "broadcastSetName");
并在地图功能中访问:
@Override
public void open() {
Collection<Integer> broadcastSet = getRuntimeContext().getBroadcastVariable("broadcastSetName");
}
看来这仅适用于RichMapfunctions,但我想在减少功能中访问此广播变量。当我在降低功能中编写打开函数时,我会得到错误"方法不覆盖其超级阶级的方法"。
我知道我可以在减少之前接收地图功能中的广播,但是随后我必须将其添加到数据集中的每个条目,这是开销。另外,我正在使用一个不存在打开功能的FlatMapFunction。
我也不想。要将我的一个值传递到降低功能中。
有人知道使我的一个值在减少功能中访问吗?谢谢
通过RuntimeContext
访问广播集。可以通过调用RichFunction.getRuntimeContext()
获得RuntimeContext
。
flink为大多数功能接口提供了"富"变体,包括 RichReduceFunction
。
只需实现RichReduceFunction
,就可以访问RuntimeContext
的所有功能。