Google cloud dataflow 如何在Apache beam中基于单个键在多个列上应用聚合函数?
我正在使用ApacheBeamPythonSDK并处理GCP数据流。如何基于单个键在多个列上应用聚合函数? 例如,一个包含10列的数据集,其中我的数据看起来像Google cloud dataflow 如何在Apache beam中基于单个键在多个列上应用聚合函数?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我正在使用ApacheBeamPythonSDK并处理GCP数据流。如何基于单个键在多个列上应用聚合函数? 例如,一个包含10列的数据集,其中我的数据看起来像 用户id、产品id、年份、数量、价格,。。。 101,1,2018,10,15,... 101,2,2019,1,10,... 102,1,2019,2,16,... 对于每个用户id,我如何计算他购买的不同产品的数量、最大(数量)、最小(价格)等 我已经看到了wordcount等的例子,您可以对(键,值)对中的值应用sum。如果我想
用户id、产品id、年份、数量、价格,。。。
101,1,2018,10,15,...
101,2,2019,1,10,...
102,1,2019,2,16,...
对于每个用户id,我如何计算他购买的不同产品的数量、最大(数量)、最小(价格)等
我已经看到了wordcount等的例子,您可以对(键,值)对中的值应用sum。如果我想在不同的列上做不同的转换,比如求和/平均数/计数等等, < P>梁使用<代码> pCys,这是一个并行的集合,在Python中你可以认为它是(通常)元素列表(通常是元组或DICT)。p> 在您的情况下,它可能是一个“行”列表,因此
User\u id
,那么映射类似于此lambda的内容
e、 gx->(x[0],x)
请注意,x用作k,v对中的值,并且它仍然包含键,但这很好,如果需要,可以删除它并重新打包没有它的值元组。i、 e.返回的这个元组将类似于类型tuple[str,tuple[int,int,int,float,float]],假设这些是正确的用户id、产品id、年份、数量、价格类型
def多重聚集(元素):
(键,行)=元素
返回(键,(最大值(第[3]行)),最小值(第[4]行))
在本例中,我将user_id作为上一步的键,以及max of quantity和min of price,然后将其打包回k,v对的元组中。k,v对是一个元组,它是下游PCollection的一个元素。需要k,v对的主要原因是GroupByKey
之类的东西隐式地使用第一个值作为分组的键。整个元素隐式用作映射到函数的值。这两件事在查看apachebeam示例时并不明显
您可以重新打包成k,v对以进行进一步的下游处理,也可以放入准备写入的结构中,例如bigquery或bigtable,或者可能是云存储桶中的文件。在任何情况下使用类型提示都是一个好主意梁使用<代码> pCys,一个并行的集合,在Python中,你可以认为它是(通常)元素列表(通常是元组或DICT)。p> 在您的情况下,它可能是一个“行”列表,因此
User\u id
,那么映射类似于此lambda的内容
e、 gx->(x[0],x)
请注意,x用作k,v对中的值,并且它仍然包含键,但这很好,如果需要,可以删除它并重新打包没有它的值元组。i、 e.返回的这个元组将类似于类型tuple[str,tuple[int,int,int,float,float]],假设这些是正确的用户id、产品id、年份、数量、价格类型
def多重聚集(元素):
(键,行)=元素
返回(键,(最大值(第[3]行)),最小值(第[4]行))
在本例中,我将user_id作为上一步的键,以及max of quantity和min of price,然后将其打包回k,v对的元组中。k,v对是一个元组,它是下游PCollection的一个元素。需要k,v对的主要原因是GroupByKey
之类的东西隐式地使用第一个值作为分组的键。整个元素隐式用作映射到函数的值。这两件事在查看apachebeam示例时并不明显
您可以重新打包成k,v对以进行进一步的下游处理,也可以放入准备写入的结构中,例如bigquery或bigtable,或者可能是云存储桶中的文件。在任何情况下使用类型提示都是一个好主意 第[3]行不包含数量值列表。max(第[3]行)不是计算数量max的正确方法。将这三个元素(101,(12018,10,15)),(101,(22019,1,10))和(102,(12019,2,16))分组,结果是[(101,[(12018,xx,15),(22019,xx,10)],(102,[(12019,xx,16)],其中xx是数量10,1,2row[3]的值,将不包含数量值列表。max(第[3]行)不是计算数量max的正确方法。将这三个元素(101,(12018,10,15)),(101,(22019,1,10))和