如何根据数据将一个数据流输出到不同的输出? [英] How to output one data stream to different outputs depending on the data?

查看:36
本文介绍了如何根据数据将一个数据流输出到不同的输出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In Apache Flink I have a stream of tuples. Let's assume a really simple Tuple1<String>. The tuple can have an arbitrary value in it's value field (e.g. 'P1', 'P2', etc.). The set of possible values is finite but I don't know the full set beforehand (so there could be a 'P362'). I want to write that tuple to a certain output location depending on the value inside of the tuple. So e.g. I would like to have the following file structure:

  • /output/P1
  • /output/P2

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

In the documentation I only found possibilities to write to locations that I know beforehand (e.g. stream.writeCsv("/output/somewhere")), but no way of letting the contents of the data decide where the data is actually ending up.

我在文档中阅读了有关输出拆分的内容,但这似乎并没有提供一种方法将输出重定向到我想要的不同目的地(或者我只是不明白这是如何工作的).

I read about output splitting in the documentation but this doesn't seem to provide a way to redirect the output to different destinations the way I would like to have it (or I just don't understand how this would work).

这可以用 Flink API 来完成吗,如果可以,怎么做?如果没有,是否有第三方库可以做到这一点,还是我必须自己构建这样的东西?

Can this be done with the Flink API, if so, how? If not, is there maybe a third party library that can do it or would I have to build such a thing on my own?

推荐答案

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

You can implement a custom sink. Inherit from one of both:

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

在您的程序中使用:

stream.addSink(SinkFunction<T> sinkFunction);

而不是 stream.writeCsv("/output/somewhere").

这篇关于如何根据数据将一个数据流输出到不同的输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆