数据分支和应用转换
问题描述:
我刚开始使用数据流,关于如何实现分支我有几个问题。数据分支和应用转换
说我有一串单词,如果我想过滤每个字母开始的所有单词,我该如何实现它。我应该对每个数据应用过滤器并将其分配给PCollection吗?如果是这样,那么对于每个过滤器,我将读取整个数据流,这些数据不是那么有用,我将不得不创建26个PCollections来获取以每个字母开头的字母。有没有更好的方法来做到这一点,而不是迭代相同的数据?
此外,如果我想申请几个字母的窗口和直接流其余的直接如何做。
非常感谢并感谢您的帮助。
答
您可以使用Partition转换将您的数据分区为多个子PCollections,而无需多次迭代您的数据。然后,您可以将其他转换和窗口单独应用到分区的不同输出。
例如:
PCollection<Student> students = ...;
// Split students up into 10 partitions, by percentile:
PCollectionList<Student> studentsByPercentile =
students.apply(Partition.of(10, new PartitionFn<Student>() {
public int partitionFor(Student student, int numPartitions) {
return student.getPercentile() // 0..99
* numPartitions/100;
}}))
for (int i = 0; i < 10; i++) {
PCollection<Student> partition = studentsByPercentile.get(i);
...
}
感谢您的快速反应。如果有一些示例程序会很好。 – Neoster
增加了一个例子 – danielm