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

Apache Flink:数据流API中的边输出和split()之间有什么区别?

益稳
2023-03-14
val splited = datastream.split { i => i match {
   case i if ... => Seq("red", "blue")
   case _ => Seq("green")
}}

splited.select("green").flatMap { .... }

它还提供了另一种称为边输出的方法(https://ci.apache.org/projects/flink/flink-docs-release-1.5/dev/stream/side_output.html),它允许您做同样的事情!

这两种方式有什么区别?他们使用相同的低层结构吗?它们的价格一样吗?我们应该在什么时候以及如何选择其中的一个?

共有1个答案

堵宏毅
2023-03-14

split运算符从早期起就是DataStream API的一部分。后面添加的side output特性提供了split功能的超集。

split创建多个相同类型的流,即输入类型。侧输出可以是任何类型的,即,也不同于输入和主输出。

在内部,split添加了专门的运算符,该运算符只对流进行拆分。边输出在应用任意逻辑并具有多个输出的运算符(通常是processfunction或window运算符)中定义。我不认为这会导致显著的性能差异。

 类似资料:
  • 问题内容: 所述流文档状态双工流 “是同时实现可读写接口流”和变换流 “是双相流其中输出以某种方式从输入计算”。不幸的是,文档没有描述Transplex流在Duplex流之外提供的内容。 两者之间有什么区别吗?您什么时候可以使用另一个? 问题答案: 可以将双工流视为具有可写流的可读流。两者都是独立的,每个都有独立的内部缓冲区。读写事件独立发生。 转换流是双工的,其中读写以因果关系进行。双工流的端点

  • 问题内容: 我知道一个API称为一组用于调用某些东西的函数,一个库是一个类的集合,但是像这样的包中的API实际上是什么?我可以在不使用任何API的情况下连接到类似的类,那么为什么我们称其为J2SE API而不是J2SE软件包? 问题答案: 直接来自维基百科: 在计算机科学中,应用程序编程接口(API)是定义应用程序可以从库请求服务的方式的接口 Java在那些软件包中包含许多库(Swing等),而A

  • 我试图理解反应流和反应流之间的区别,特别是在RxJava的上下文中? 我所能理解的最多的是,反应流在规范中有一些背压的概念,但在RxJava/Reactive中已经存在了请求(n)接口。 我不介意ELI5的回答。

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 我有2个使用kafka主题创建的流,我正在使用DataStream API加入它们。我希望将连接(应用)的结果发布到另一个kafka主题。我在外部主题中看不到连接的结果。 我确认我向两个源主题发布了正确的数据。不确定哪里出了问题。下面是代码片段, 创建的流如下所示。 流连接使用等于的连接执行,如下所示。 如下所述, 有什么线索吗,哪里出了问题?我可以在拓扑中看到可用的消息,谢谢

  • 问题内容: 今天我收到了这个问题,我想我回答的很不好。我说过流是流动的数据,而阅读器是一种我们从中读取的技术,它是静态数据。我知道这是一个糟糕的答案,因此请通过Java示例为我提供这两者之间的清晰区别和定义。 谢谢。 问题答案: 正如其他人所说,每种情况的用例略有不同(即使它们经常可以互换使用) 由于阅读器用于读取字符,因此当您处理文本性质的输入(或以字符表示的数据)时,它们会更好。我之所以说得更