我正在使用Google DataFlow Java SDK 2.2.0。用例如下:
PCollection pEmployees:员工和相应的部门名称。可能包含多达1000万个元素。
PCollection pDepartments:部门名称和每个部门要发布的元素数量。将包含几百个元素。
任务:根据pDepartments中所有部门的部门编号从pEmployees收集元素。这将是一个大集合(高达几十万元素或几GB)。
我们不能在这里使用Top变换,因为它在pEmployee上一次只能工作一次,而我们在PCollection中有多个部门。我们可以为pEmployees中的每个元素分配行号,将其与pDepartments连接并过滤其中row_number>的记录。来自pDepartments的目标号码。这将需要全球排名。
问题:我们如何为pcollection中的元素分配排名/行号?
答案 0 :(得分:0)
这非常接近Sample
转换,但并不完全,因为它在用作.perKey()
时对所有键应用相同的阈值。通常,Beam目前不支持每个键与不同的组合函数参数组合。
我建议您使用CoGroupByKey
加入pEmployees
和pDepartments
并获取包含部门名称的元组(CoGbkResult
)来模拟它,N =数量元素,以及该部门的所有员工。然后简单地遍历员工并发出第一个N并丢弃其余的。