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

apache beam全局组合洗牌

丁翊歌
2023-03-14

在我的apache beam和dataflow管道中,我执行了一些需要全局合并操作的转换,如min、max、自定义全局合并函数。pcollection中要处理的项目数量大约为20亿到40亿。

我读到大多数合并操作构建在groupBykey之上,这会导致洗牌,我认为这会使我当前的流水线变慢,或者从UI观察到全局合并操作中最高的墙时间。我查看了代码,groupByKey试图向所有元素添加一个静态void键,然后执行groupby,这是否意味着我们正在洗牌数据(特别是当我们只有一个键时)?有什么方法可以有效地做到这一点吗

另一个我自己理解的问题是:beam/dataflow文档说,一个键的所有元素都要由一个工作人员/线程来处理。以在pcollection of integers中寻找max为例,这种全局操作是完全并行的,其中我的合并器/累加器对部分/子集数据进行工作,找到max,然后合并部分结果(合并两个max得到max),在树形结构中,树叶的结果可以合并得到父节点,每个节点基本上可以以分布式的方式求值。那么,到底是什么操作强制一个键必须由一个工作线程/线程来处理。似乎任何全局操作,如果你有组合器,是交换的和关联的,都可以很容易地并行化。全局组合的哪个部分需要通过单个工作线程?

共有1个答案

楚俊逸
2023-03-14

Dataflow将为每个元素分配一个不同的键,因此最终不会使用所有相同的键(因此没有并行性)。如果全部分配给一个键,那么只有一个工作人员能够处理,而且会非常慢。

 类似资料:
  • VitePress自带一些可以全局使用的内置组件。你可以在你的markdown文件或自定义主题配置中使用这些组件。 Content Content组件显示渲染后的Markdown内容。 当你创建自定义主题时有用。 <template> <h1>Custom Layout!</h1> <Content /> </template> ClientOnly ClientOnly组件仅在客户端渲

  • 我有一个数据流工作,将单个文件分割成x个记录(表)。这些流在bigQuery没有问题。 不过,我发现没有办法在结果出来后执行管道中的另一个阶段。 举个例子 根据上述内容,我希望运行以下内容: 是有无论如何运行管道的另一个部分后,up到bigQuery或这是不可能的?提前感谢。

  • 本文向大家介绍Bootstrap 布局组件(全),包括了Bootstrap 布局组件(全)的使用技巧和注意事项,需要的朋友参考一下 Bootstrap 布局组件 1、Bootstrap字体图标 (1)、字体图标列表链接      http://www.runoob.com/bootstrap/bootstrap-glyphicons.html (2)、用法      如需使用图标,只需要简单地使用

  • $_SERVER是什么 WorkerMan中的超全局数组$_SERVER包含了5个元素,分别是: REMOTE_ADDR // 客户端ip(如果客户端处于局域网,则是客户端所在局域网的出口ip) REMOTE_PORT // 客户端端口(如果客户端处于局域网,则是客户端所在局域网的出口端口) GATEWAY_ADDR // gateway所在服务器的ip GATEWAY_PORT // getew

  • $_SESSION是什么 GatewayWorker中的超全局数组$_SESSION和PHP自身的$_SESSION功能基本相同。每个client_id对应一个$_SESSION数组,$_SESSION数组中可以保存对应客户端的会话数据,对应的client_id的后续请求可以直接使用这个数组中的数据,而不用去反复读取存储。 $_SESSION使用场景 (WorkerMan>=2.1.2,Gatew

  • 本文向大家介绍详解vue.js全局组件和局部组件,包括了详解vue.js全局组件和局部组件的使用技巧和注意事项,需要的朋友参考一下 这两天学习了Vue.js 感觉组件这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。 首先Vue组件的使用有3个步骤,创建组件构造器,注册组件,使用组件3个方面。 代码演示如下: 2.理解组件的创建和注册 我们用以下几个步骤来理解组件的创建和注册: 1. V