数据分支和应用转换

问题描述:

我刚开始使用数据流,关于如何实现分支我有几个问题。数据分支和应用转换

说我有一串单词,如果我想过滤每个字母开始的所有单词,我该如何实现它。我应该对每个数据应用过滤器并将其分配给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); 
    ... 
} 
+0

感谢您的快速反应。如果有一些示例程序会很好。 – Neoster

+0

增加了一个例子 – danielm