Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将单个PCollection拆分为多个(动态数量的)PCollection,然后对每个集合进行计算_Java_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

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

Java 将单个PCollection拆分为多个(动态数量的)PCollection,然后对每个集合进行计算,java,google-cloud-dataflow,apache-beam,Java,Google Cloud Dataflow,Apache Beam,我有一个从PubsubIO读取的无界集合,包含数据,称为Tradeformat like { timestamp: 123, type: "", side: "" // sell or buy volume: 123.12, location: "" } 有数百个类型s和40多个位置s,它们之间的关系是n 我的任务是按侧、类型和位置计算10分钟和60分钟类别的交易总量,并根据类型计算总交易量。因此,输出应该是4个集合,每个集合用于10分钟和60分钟,同时用于销售和购买,称为

我有一个从PubsubIO读取的无界集合,包含数据,称为
Trade
format like

{
  timestamp: 123,
  type: "",
  side: "" // sell or buy
  volume: 123.12,
  location: ""
}
有数百个
类型
s和40多个
位置
s,它们之间的关系是
n

我的任务是按
类型
位置
计算10分钟和60分钟类别的交易总量,并根据类型计算总交易量。因此,输出应该是4个集合,每个集合用于10分钟和60分钟,同时用于销售和购买,称为
TotalTrade
,如

{
  total: 123,
  type: "",
  location: "",
}
到目前为止我试过的是

  • 根据交易的哪一方将集合分为两个集合
  • 对于每个集合,我将处理

  • 将收藏窗口设置为固定窗口10分钟
  • ParDo转换为
    类型的KV
    交易
  • GroupByKey,因此我们收集了
    KV
  • 应用自定义ParDo计算
    Iterable
    中每个位置的总体积,因此输出为
    KV
  • 问题出在自定义Pardo步骤中。我必须按地点手动分组
    交易
    s,计算总数,然后输出结果。对我来说,它并没有采用ApacheBeam或Google数据流的并行模型

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

  • 将收藏转换为基于
    交易的
    类型的收藏
  • 根据
    位置
  • 进行组合变换以计算
    TotalTrade
  • 因此,现在我们有了
    TotalTrade
    分类(按
    location
    type

  • 对步骤4中的每组集合执行展平变换
  • 在每个系列上进行联合收割机

  • 因此,现在我们有了基于
    类型的总卷

    如果在管道创建期间动态数量不可用,则不可能将集合分支为动态数量的集合。图形/步骤设置在管道的开头,不能更改


    如果您有很多动态数字,您可以尝试使用id输出结果并按id分组。但是,如果您没有很多id并且确实有很多值,您将得到一些热键(所有id都必须由一个工作人员处理)。

    使用复合键(类型、边、位置)的Count.perKey()如何,例如,表示为千伏?@jkff是的。我想出了如何使用组合变换和复合关键点来解决这个问题。我会尽快把它寄到这里