2017-08-14 90 views
5

我想了解在哪種情況下我應該使用FlatMap或Map。 The documentation對我來說似乎不太清楚。Apache Beam:FlatMap vs Map?

我仍然不明白在哪種情況下我應該使用FlatMap或Map的轉換。

有人能給我一個例子,所以我可以理解他們的區別嗎?

我明白FlatMap的VS地圖Spark中的差異,但不知道是否有任何相似之處嗎?

回答

8

Beam中的這些轉換和Spark(斯卡拉)完全相同。

Map變換,從N個元素的PCollection映射成N個元件的另一PCollection

FlatMap變換映射的N個元素到零個或多個元件,其然後壓平成單個PCollection N個集合的PCollections

一個簡單的例子,發生以下情況:

beam.Create([1, 2, 3]) | beam.Map(lambda x: [x, 'any']) 
# The result is a collection of THREE lists: [[1, 'any'], [2, 'any'], [3, 'any']] 

鑑於:

beam.Create([1, 2, 3]) | beam.FlatMap(lambda x: [x, 'any']) 
# The lists that are output by the lambda, are then flattened into a 
# collection of SIX single elements: [1, 'any', 2, 'any', 3, 'any'] 
+0

Pablo-明白了。感謝您的詳細解釋和示例。 :) – EmmaYang

+0

您可以接受的答案,如果它是適當的:) – Pablo

+0

優秀解釋+1 – codebrotherone