2017-07-17 41 views
0

我有一個管道開始接收類別ID列表。如何使用Apache Beam模型導航樹

ParDo我執行DoFn調用使用這些ID作爲參數REST API,並返回一個Category對象的PCollection

.apply("Read Category", ParDo.of(new DoFn<String, Category>(){}); 

在第二ParDo我堅持這個Category對象,讀他的孩子屬性,並返回他的孩子們的ID。

.apply("Persist Category", ParDo.of(new DoFn<Category, String>(){}); 

我想在第二ParDo返回ID列表中再次重複第一ParDo直到有沒有孩子類別。

我該如何利用Apache Beam模型從並行處理中獲益?

回答

1

Apache Beam目前不提供任何用於迭代並行處理的基元。您可以使用一些解決方法,例如其中一些在this answer中列出。

另一種方法是編寫一個簡單的Java函數,它將遍歷樹的特定頂級ID(遞歸地從給定ID開始獲取類別和子元素),並使用ParDo並行地應用該函數 - 但是,顯然,在該函數內不會有分佈式並行。你也可以首先部分「展開」管道中的迭代,以便在樹的前幾個級別獲得一堆分佈式並行性 - 例如,用一系列第一和第二個ParDo構建一個流水線,然後應用第三個ParDo,該第三個ParDo應用迭代Java函數遍歷剩餘的水平。

請注意,如果您在Dataflow或任何其他支持融合優化的跑步者上執行操作,很可能需要使用preventing fusion的其中一個技巧。

+0

謝謝@jkff,我將嘗試部分展開策略。 – Magritte