gpt4 book ai didi

java - 将单个 PCollection 拆分为多个(动态数量的)PCollection,然后对每个集合进行计算

转载 作者:行者123 更新时间:2023-12-02 11:30:44 27 4
gpt4 key购买 nike

我有一个无界集合,它是从 PubsubIO 中读取数据的,名为 Trade格式如

{
timestamp: 123,
type: "",
side: "" // sell or buy
volume: 123.12,
location: ""
}

有数百个 type s及以上40号location s 及其关系为 n <=> n .

我的任务是按 side 计算 10 分钟和 60 分钟类别的交易总量, typelocation ,还根据类型计算总体积。因此,输出应该是 4 个集合,每个集合持续 10 分钟和 60 分钟,同时用于出售和购买,称为 TotalTrade ,喜欢

{
total: 123,
type: "",
location: "",
}

到目前为止我尝试过的是。

  1. 根据贸易方向将集合分为 2 个集合

对于我处理的每个集合

  • 将集合窗口化到固定窗口 10 分钟
  • ParDo 转换为 type 的 KV Trade
  • GroupByKey 所以我们有 KV<String, Iterable<Trade>> 的集合
  • 应用自定义 ParDo 计算 Iterable<Trade> 中每个位置的总体积所以输出是KV<String, Iterable<KV<String, TotalTrade>>>
  • ...
  • 问题出在自定义 Pardo 步骤中。我要手动群Trade按位置计算总数,然后输出结果。对我来说,这并不支持 Apache Beam 或 Google Dataflow 的并行模型。

    所以我的问题是有没有办法将集合分支为 Beam 模型中的动态数字集合。例如,我的问题可以通过以下转换来解决。

  • 将集合转换为基于 type 的集合的Trade
  • 将每个集合转换为基于 location 的集合
  • 进行组合变换来计算TotalTrade
  • 现在我们有 TotalTrade分类依据 locationtype

  • 对第 4 步中的每组集合进行 Flatten 变换。
  • 对每个集合进行合并
  • 现在我们的总交易量基于 type

    最佳答案

    如果动态数量在管道创建期间不可用,则无法将集合分支为动态数量的集合。图表/步骤在管道的开始处设置并且无法更改。

    如果您有很多动态数字,您可以尝试使用 ID 来输出结果并进行分组。然而,如果你没有很多 id 但有很多值,你会得到一些热键(所有 id 都必须由 1 个工作人员处理)。

    关于java - 将单个 PCollection 拆分为多个(动态数量的)PCollection,然后对每个集合进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49316584/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com