如何根据数据将一个数据流输出到不同的输出



在Apache Flink中,我有一个元组流。让我们假设一个非常简单的Tuple1<String>。元组的值字段中可以有一个任意值(例如"P1"、"P2"等)。可能值的集合是有限的,但我事先不知道完整的集合(因此可能有一个"P362")。我想根据元组内部的值将该元组写入特定的输出位置。因此,例如,我希望有以下文件结构:

  • /output/P1
  • /output/P2

在文档中,我只找到了写入我事先知道的位置(例如stream.writeCsv("/output/somewhere"))的可能性,但没有办法让数据的内容决定数据的实际结束位置。

我在文档中读到了关于输出拆分的内容,但这似乎并没有提供一种将输出重定向到不同目的地的方法(或者我只是不明白这是怎么回事)。

这可以通过Flink API实现吗?如果可以,如何实现?如果没有,是否有第三方图书馆可以做到这一点,或者我是否必须自己建造这样一个东西?

您可以实现自定义接收器。从两者之一继承:

  • org.apache.flink.streaming.api.functions.sink.SinkFunction
  • org.apache.flink.streaming.api.functions.sink.RichSinkFunction

在您的程序中使用:

stream.addSink(SinkFunction<T> sinkFunction);

而不是CCD_ 7。

相关内容

  • 没有找到相关文章

最新更新