对pcollection元素进行排名

时间:2018-01-16 15:20:50

标签: google-cloud-dataflow apache-beam

我正在使用Google DataFlow Java SDK 2.2.0。用例如下:

PCollection pEmployees:员工和相应的部门名称。可能包含多达1000万个元素。

PCollection pDepartments:部门名称和每个部门要发布的元素数量。将包含几百个元素。

任务:根据pDepartments中所有部门的部门编号从pEmployees收集元素。这将是一个大集合(高达几十万元素或几GB)。

我们不能在这里使用Top变换,因为它在pEmployee上一次只能工作一次,而我们在PCollection中有多个部门。我们可以为pEmployees中的每个元素分配行号,将其与pDepartments连接并过滤其中row_number>的记录。来自pDepartments的目标号码。这将需要全球排名。

问题:我们如何为pcollection中的元素分配排名/行号?

1 个答案:

答案 0 :(得分:0)

这非常接近Sample转换,但并不完全,因为它在用作.perKey()时对所有键应用相同的阈值。通常,Beam目前不支持每个键与不同的组合函数参数组合。

我建议您使用CoGroupByKey加入pEmployeespDepartments并获取包含部门名称的元组(CoGbkResult)来模拟它,N =数量元素,以及该部门的所有员工。然后简单地遍历员工并发出第一个N并丢弃其余的。