2016-06-21 58 views
0

我剛開始使用數據流,關於如何實現分支我有幾個問題。數據分支和應用轉換

說我有一串單詞,如果我想過濾每個字母開始的所有單詞,我該如何實現它。我應該對每個數據應用過濾器並將其分配給PCollection嗎?如果是這樣,那麼對於每個過濾器,我將讀取整個數據流,這些數據不是那麼有用,我將不得不創建26個PCollections來獲取以每個字母開頭的字母。有沒有更好的方法來做到這一點,而不是迭代相同的數據?

此外,如果我想申請幾個字母的窗口和直接流其餘的直接如何做。

非常感謝並感謝您的幫助。

回答

1

您可以使用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