当前位置: 首页 > 知识库问答 >
问题:

Apache Flink:SpiltStream与侧输出

章学义
2023-03-14

从这个问题中,我了解到Apache Flink中的SplitStream现在已被弃用,建议改用side输出。有人能举一个侧面输出如何替代splitStream的例子吗?

e、 g.如何修改下面的代码段以使用侧输出?

        DataStream mainDataStream = some definition
        SplitStream<some-type> splitStream = mainDataStream.select("some-string")

共有1个答案

东方骏
2023-03-14

而不是

java prettyprint-override">SplitStream<Integer> split = someDataStream.split(new OutputSelector<Integer>() {

    @Override
    public Iterable<String> select(Integer value) {
        List<String> output = new ArrayList<String>();
        if (value % 2 == 0) {
            output.add("even");
        }
        else {
            output.add("odd");
        }
        return output;
    }
});

DataStream<Integer> evens = split.select("even");
DataStream<Integer> odds = split.select("odd");

你现在可以

final OutputTag<Integer> evenTag = new OutputTag<String>("even"){};
final OutputTag<Integer> oddTag = new OutputTag<String>("odd"){};

SingleOutputStreamOperator<Integer> mainDataStream = someDataStream
    .process(new ProcessFunction<Integer, Integer>() {

        @Override
        public void processElement(
          Integer value,
          Context ctx,
          Collector<Integer> out) throws Exception {

          if (value % 2 == 0) {
              ctx.output(evenTag, value);
          } else {
              ctx.output(oddTag, value);
          }
   });

DataStream<Integer> evens = mainDataStream.getSideOutput(evenTag);
DataStream<Integer> odds = mainDataStream.getSideOutput(oddTag);

请注意,与拆分流不同,侧输出流可以是不同类型的。

 类似资料:
  • 每个进程操作系统都会分配三个文件资源,分别是标准输入(STDIN)、标准输出(STDOUT)和错误输出(STDERR)。通过这些输入流,我们能够轻易得从键盘获得数据,然后在显示器输出数据。 标准输入 来自管道(Pipe)的数据也是标准输入的一种,我们写了以下的实例来输出标注输入的数据。 package main import ( "fmt" "io/ioutil" "os" ) f

  • 有些时候你的程序会与用户产生交互。举个例子,你会希望获取用户的输入内容,并向用户打印出一些返回的结果。我们可以分别通过 input() 函数与 print 函数来实现这一需求。 对于输入,我们还可以使用 str (String,字符串)类的各种方法。例如,你可以使用 rjust 方法来获得一个右对齐到指定宽度的字符串。你可以查看 help(str) 来了解更多细节。 另一个常见的输入输出类型是处理

  • 输入与输出可以说是一个实用程序的最基本要求,没有输入输出的程序是没有什么卵用的。虽然输入输出被函数式编程语言鄙称为副作用,但正是这个副作用才赋予了程序实用性,君不见某著名函数式语言之父称他主导设计的函数式语言”is useless“。这章我们就来谈谈输入输出副作用。 读写 Trait 输入最基本的功能是读(Read),输出最基本的功能是写(Write)。标准库里面把怎么读和怎么写抽象出来归到了 R

  • 我们已经说明了 Haskell 是一个纯粹函数式语言。虽说在命令式语言中我们习惯给电脑执行一连串指令,在函数式语言中我们是用定义东西的方式进行。在 Haskell 中,一个函数不能改变状态,像是改变一个变量的内容。(当一个函数会改变状态,我们说这函数是有副作用的。)在 Haskell 中函数唯一可以做的事是根据我们给定的参数来算出结果。如果我们用同样的参数调用两次同一个函数,它会回传相同的结果。尽

  • 注:Stream-1为主流,Stream-2为侧输入。主流正在不断从Kafka那里获取数据。对于侧输入,最初在应用程序启动时从DB加载所有表数据,然后在表数据更新时读取新数据(不频繁)。 示例结构: 我被指为以下链接。 用缓慢发展的数据连接流:我们用于丰富的侧输入是随着时间发展的(数据是从DB读取的)。这可以通过等待一些初始数据可用,然后处理主输入,并在新数据到达时不断地将其摄取到内部输入结构中来

  • 文件 std::fs::File 本身实现了 Read 和 Write trait,所以文件的输入输出非常简单,只要得到一个 File 类型实例就可以调用读写接口进行文件输入与输出操作了。而要得到 File 就得让操作系统打开(open)或新建(create)一个文件。还是拿例子来说明 use std::io; use std::io::prelude::*; use std::fs::File;