FlatMap
![]() |
對集合中的每個元素套用簡單的一對多對應函式。多個元素會扁平化到產生的集合中。
範例
在下列範例中,我們建立一個管線,其中包含具有圖示、名稱和持續時間的產品 `PCollection`。然後,我們以多種方式套用 `FlatMap`,以將每個輸入元素產生零個或多個元素到產生的 `PCollection` 中。
`FlatMap` 接受一個返回 `iterable` 的函式,其中每個輸出 `iterable` 的元素都是產生的 `PCollection` 的元素。
範例 1:使用預先定義函式的 FlatMap
我們使用函式 `str.split`,它接受單個 `str` 元素,並輸出一個 `str` 的 `list`。此管線使用空格分隔輸入元素,建立一個包含零個或多個元素的清單。
範例 2:使用函式的 FlatMap
我們定義一個函式 `split_words`,它使用分隔符 `,` 分隔輸入 `str` 元素,並輸出一個 `str` 的 `list`。
範例 3:不使用函式的 FlatMap
`FlatMap` 的常見使用案例是將 `PCollection` 的可迭代物件扁平化為元素的 `PCollection`。若要執行此操作,請勿指定 `FlatMap` 的函式引數,它會使用識別對應函式。
範例 4:使用 Lambda 函式的 FlatMap
在此範例中,我們想要將 `str` 的列表 `PCollection` 扁平化為 `str` 的 `PCollection`。每個輸入元素都已經是 `iterable`,其中每個元素都是我們在產生的 `PCollection` 中想要的內容。我們使用一個 Lambda 函式,它返回它接收到的相同輸入元素。
範例 5:使用產生器的 FlatMap
在此範例中,我們想要將 `str` 的列表 `PCollection` 扁平化為 `str` 的 `PCollection`。我們使用產生器來迭代輸入列表並產生每個元素。產生器中每個產生的結果都是產生的 `PCollection` 中的一個元素。
範例 6:用於鍵值對的 FlatMapTuple
如果您的 `PCollection` 由 `(key, value)` 對組成,則可以使用 `FlatMapTuple` 將它們解壓縮到不同的函式引數中。
範例 7:使用多個引數的 FlatMap
您可以將具有多個引數的函式傳遞給 `FlatMap`。它們會作為額外的位置引數或關鍵字引數傳遞給函式。
在此範例中,`split_words` 接受 `text` 和 `delimiter` 作為引數。
範例 8:使用側輸入作為單例的 FlatMap
如果 `PCollection` 具有單個值,例如來自另一個計算的平均值,則將 `PCollection` 作為 _singleton_ 傳遞可存取該值。
在此範例中,我們將值 `,` 的 `PCollection` 作為單例傳遞。然後,我們使用該值作為 `str.split` 方法的分隔符。
範例 9:使用側輸入作為迭代器的 FlatMap
如果 `PCollection` 具有多個值,則將 `PCollection` 作為 _iterator_ 傳遞。這會在需要時延遲存取元素,因此可以迭代無法放入記憶體的大型 `PCollection`。
注意:您可以使用 `beam.pvalue.AsList(pcollection)` 將 `PCollection` 作為 _list_ 傳遞,但是這需要所有元素都放入記憶體。
範例 10:使用側輸入作為字典的 FlatMap
如果 `PCollection` 小到足以放入記憶體,則可以將該 `PCollection` 作為 _dictionary_ 傳遞。每個元素都必須是 `(key, value)` 對。請注意,`PCollection` 的所有元素都必須適合放入記憶體中。如果 `PCollection` 無法放入記憶體,請改用 `beam.pvalue.AsIter(pcollection)`。
相關轉換
![]() |
上次更新於 2024/10/31
您是否找到了您要尋找的所有內容?
這些內容對您來說是否有用且清楚明瞭?是否有任何您想更改的地方?請告訴我們!