我有一个无限制的集合,从PubsubIO读取数据,称为Trade
格式,如
{
timestamp: 123,
type: "",
side: "" // sell or buy
volume: 123.12,
location: ""
}
有type
个,{40}个以上location
个,其关系为n <=> n
。
我的任务是按side
,type
和location
计算10分钟和60分钟类别的交易量,同时根据类型计算总交易量。所以,输出应该是4个东西的集合,每个集合为10分钟和60分钟,对于销售和购买,称为TotalTrade
,如
{
total: 123,
type: "",
location: "",
}
到目前为止我尝试了什么。
我处理的每个集合
type
Trade
KV<String, Iterable<Trade>>
Iterable<Trade>
中每个位置的总音量,因此输出为KV<String, Iterable<KV<String, TotalTrade>>>
问题在于自定义Pardo步骤。我必须按位置手动分组Trade
,计算总数然后输出结果。对我来说,这不是拥抱Apache Beam或Google Dataflow的并行模型。
所以我的问题是有没有办法将一个集合分支到Beam模型中的动态数字集合中。例如,我的问题可以通过以下转换来解决。
type
Trade
将集合转换为集合
location
TotalTrade
现在我们按TotalTrade
和location
type
现在我们的总量基于type
答案 0 :(得分:1)
如果在管道创建期间动态数字不可用,则无法将集合分支到动态数量的集合中。图表/步骤在管道的开头设置,不能更改。
如果你有很多动态数字,你可以尝试用id输出结果和分组。但是,如果你没有很多id并且确实有很多值,你会得到一些热键(所有的id都必须由1个worker处理)。