为什么在 Dataflow beta 中 #sideInput() 方法从 Context 移至 ProcessContext

2023-12-10

我想知道为什么有#sideInput()方法移至ProcessContext班级? 以前我可以在#startBundle()方法并缓存结果。 这样做在#processElement()听起来效率较低。当然,我可以在将数据传递到视图之前进行预处理,但是仍然存在调用的开销#sideInput()对于每个元素...

谢谢, G


很好的问题。原因是我们添加了对窗口 PCollections 作为侧面输入的支持。这支持其他场景,包括在流模式下使用带有无界 PCollection 的侧输入。

在更改之前,我们仅支持全局窗口化的侧输入,然后在处理主输入 PCollection 的每个元素时,整个侧输入 PCollection 都可用。这对于传统批处理样式处理中的有界 PCollection 效果很好,但不能扩展到窗口或无界 PCollection。

更改后,您在 ParDo 中处理的当前元素的窗口控制侧输入的哪些子集可见。 (因此您无法访问 startBundle() 中的侧面输入,其中没有当前元素,因此也没有当前窗口。)

例如,考虑一个示例,其中您有一个流处理管道处理您的网站日志并向实时使用仪表板提供实时更新。您有两个无限制的输入 PCollection:一个包含新用户注册,另一个包含用户点击。您可以通过按小时对两个 PCollection 进行窗口化并对用户点击执行 ParDo(将新用户注册作为辅助输入)来识别哪些用户点击来自新用户。现在,当您处理给定小时内的用户点击时,您会自动看到同一小时内新用户注册的子集。您可以通过更改窗口函数并在侧面输入上及时向前移动元素时间戳来对此进行不同的变体 - 例如继续窗口用户每小时的点击次数,但使用过去 24 小时的新注册。

我确实同意这一更改使得在您的侧面输入上缓存任何后处理变得更加困难。我们添加了 View.asMultimap 来处理将 Iterable 转换为查找表的常见情况。如果您的后处理是按元素进行的,则可以在创建 PCollectionView 之前使用 ParDo 来完成。对于现在的其他事情,我建议从 processElement 中延迟执行。我有兴趣了解其他发生的模式,这样我们就可以设法提高它们的效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 Dataflow beta 中 #sideInput() 方法从 Context 移至 ProcessContext 的相关文章

随机推荐

  • 使用 NumPy 将固定调色板应用于图像?

    我有一个 RGB 字节的 NumPy 图像 假设它是这个 2x3 图像 img np array 0 255 0 255 255 255 255 0 255 0 255 255 255 0 255 0 0 0 我还有一个调色板 涵盖图像中使
  • 如何使用JavaScript更新/更改HTML内容并防止页面刷新?

    我是脚本新手 我想用 JavaScript 更新 HTML 内容 但正如你所看到的 网页不断刷新 如何防止页面刷新 JavaScript function showResult form var coba form willbeshown
  • 如何将数组中的数字“加倍”,并将其保存在新数组中

    这是一个两步问题 1 我试图将一个数组 原始数组 的内容 加倍 将其保存在一个新数组 加倍数组 中 2 然后将这两个数组分配给具有 2 个属性的对象 新对象 原始号码 双数 这就是我到目前为止所拥有的 我做错了什么 var numbers
  • 如何使用数据字段获取组合框显示值?

    我已在资源编辑器中将组合框数据设置为 第一 第二 第三 但是当我编译程序时 组合框完全是空的 我根本看不到任何项目 另外 如何设置默认选择哪个项目 如何以编程方式更改当前选定的项目 答案可以在这篇文章中找到 http codeguru ea
  • 以编程方式更改 WPF 按钮背景图像

    我正在尝试创建一个
  • 根据文本文件中提供的类名创建对象?

    我想知道 在 C 中是否可以使用从文件中读取的文本值来创建该名称的类的对象 例如 contents of file MyClass code read file code instantiate MyClass object 如果可能的话
  • Laravel 按分页排序

    我有一个posts表和comments表 评论属于帖子 我在帖子和评论模型中设置了关系 我确实按照每个帖子的评论数量对帖子进行排序 如下所示 posts Post with comments gt get gt sortBy functio
  • 将法语(重音)字符放入 Ruby 文件中 [重复]

    这个问题在这里已经有答案了 可能的重复 Rails 和 Ruby 1 9 中的无效多字节字符 US ASCII 如何将法语字符放入 Ruby 文件中 这是一个错误 SyntaxError in ArticlesController show
  • 已知 IE 8 PHP 会话问题?

    我有一个通过 php 会话进行身份验证的登录系统 我的客户说 由于我已将网站移至新服务器 因此登录失败 但只有当他使用 IE 8 时 我一直无法复制这些问题 更奇怪的是 这一切都在以前的主机上运行 我不知道这是浏览器问题 服务器更改还是其他
  • 对齐装配 x86

    我无法理解align 我尝试运行以下命令 section data align 4 xs dw 0xA1A2 ys db 0xB1 0xB2 0xB3 0xB4 看看每个字节是什么 我希望它是内存中的一个连续块 如下所示 for insta
  • 从 `async fn` 返回的 future 的具体类型是什么?

    我应该使用什么类型的向量来存储 future 我尝试在同一个 URL 上发出多个并发请求 并将所有 future 保存到向量中以供使用join all 如果我没有明确设置向量的类型 则一切正常 我知道 Rust 可以找到变量的正确类型 CL
  • “升级”到 OSX Yosemite 后 RStudio/R 中的 rJava 加载错误

    我最近从 OSX Mountain Lion 升级 到 Yosemite 并从 R 3 1 3 升级 到 3 2 升级后 当我打开 R 或 RStudio 时 我收到一条弹出消息 说我需要安装 Java 6 此外 加载rJava或任何依赖于
  • 指向不同 Worklight 服务器的 Worklight 应用程序

    我想通过 App Store 分发我的 Worklight 应用程序 问题是 用户必须根据他们所属的公司指向不同的 Worklight Server 但我不希望我的用户能够看到 Worklight Server URL 或能够自行更改它 这
  • Python 中非线性二阶 ODE 的 Rk4 积分器

    我在大学的一个项目中 必须使用 Python 实现 Runge Kutta 4 阶积分器 我知道我可以使用 Sympy 但这里的目标是实现该方法 代码已用 Fortran 语言编写 所以基本上我有一个包含正确解决方案值的数据库 并且我必须在
  • 亚音速3联盟可能吗?

    我有一个像这样的架构 菜单 gt 页面 gt 页面角色 gt ASPNetRoles 菜单有一个 CategoryID 我想返回 CategoryID 为 6 的所有菜单项 某些菜单项具有 PageID 的外键 页面可以有 1 个或多个角色
  • 如何将支持库中的操作栏添加到 PreferenceActivity 中?

    操作栏兼容性已添加到支持库 修订版 18 中 它现在具有ActionBarActivity用于在旧版本的 Android 上使用操作栏创建活动的类 有没有办法将支持库中的操作栏添加到PreferenceActivity 以前我用过动作栏夏洛
  • 使用 API 在 Azure Key Vault 中创建密钥

    我是通过指定的订阅创建的 Azure Key Vault 跟着这篇文章 https learn microsoft com en us rest api keyvault keyvaultpreview vaults createorupd
  • 为什么对象键会转换为“[object Object]”?

    这段代码 var a b key b c key c a b 111 a c 222 console log a b 输出 222 不是 111 解释 b and c都将转换为 object Object 有人可以解释这是为什么吗 obje
  • read.csv 似乎没有检测到 R 4.0.0 中的因素

    我最近从 R 3 5 1 更新到 R 4 0 0 的行为read csv似乎已经改变 当我在 R 4 0 0 中加载 csv 文件时 不会自动检测因素 而是被识别为字符 我还在我的机器上运行 3 5 1 当使用相同的代码加载 3 5 1 中
  • 为什么在 Dataflow beta 中 #sideInput() 方法从 Context 移至 ProcessContext

    我想知道为什么有 sideInput 方法移至ProcessContext班级 以前我可以在 startBundle 方法并缓存结果 这样做在 processElement 听起来效率较低 当然 我可以在将数据传递到视图之前进行预处理 但是