我为Apache Flink流程实现了MapFunction
。它正在解析传入的元素并将它们转换为其他格式,但有时会出现错误(即传入的数据无效)。
我看到了两种可能的处理方式:
所以,我有两个问题:
MapFunction
?答案 0 :(得分:7)
您可以使用FlatMapFunction
代替MapFunction
。这将允许您仅在元素有效时才发出元素。以下显示了一个示例实现:
input.flatMap(new FlatMapFunction<String, Long>() {
@Override
public void flatMap(String input, Collector<Long> collector) throws Exception {
try {
Long value = Long.parseLong(input);
collector.collect(value);
} catch (NumberFormatException e) {
// ignore invalid data
}
}
});
答案 1 :(得分:1)
这是建立在@Till Rohrmann的想法之上。将其添加为答案而不是注释,以便更好地进行格式化。
我认为实现“split + select”的一种方法是使用带有SideOutput的ProcessFunction。我的图表看起来像这样:
Source --> ValidateProcessFunction ---good data--> UDF--->SinkToOutput
\
\---bad data----->SinkToErrorChannel
这会有用吗?还有更好的方法吗?