地圖
![]() |
在集合中的每個元素上應用簡單的 1 對 1 對應函數。
範例
在以下範例中,我們建立一個管道,其中包含一個具有其圖示、名稱和持續時間的產品的 PCollection
。然後,我們以多種方式應用 Map
來轉換 PCollection
中的每個元素。
Map
接受一個函數,該函數為 PCollection
中的每個輸入元素傳回單一元素。
範例 1:使用預先定義的函數進行 Map
我們使用函數 str.strip
,它採用單一 str
元素並輸出一個 str
。它會去除輸入元素的空白,包括換行符號和定位符號。
範例 2:使用函數進行 Map
我們定義一個函數 strip_header_and_newline
,它會去除每個元素中的任何 '#'
、' '
和 '\n'
字元。
範例 3:使用 Lambda 函數進行 Map
我們也可以使用 Lambda 函數來簡化範例 2。
範例 4:使用多個引數進行 Map
您可以將具有多個引數的函數傳遞給 Map
。它們會作為額外的位置引數或關鍵字引數傳遞給該函數。
在此範例中,strip
採用 text
和 chars
作為引數。
範例 5:用於鍵值對的 MapTuple
如果您的 PCollection
由 (key, value)
配對組成,您可以使用 MapTuple
將它們解壓縮到不同的函數引數中。
範例 6:使用側輸入作為單例的 Map
如果 PCollection
具有單一值,例如來自另一個計算的平均值,則將 PCollection
作為單例傳遞會存取該值。
在此範例中,我們會將值 '# \n'
的 PCollection
作為單例傳遞。然後,我們使用該值作為 str.strip
方法的字元。
範例 7:使用側輸入作為迭代器的 Map
如果 PCollection
有多個值,則將 PCollection
作為迭代器傳遞。這會在需要時以延遲方式存取元素,因此可以迭代不會放入記憶體的大型 PCollection
。
注意:您可以使用
beam.pvalue.AsList(pcollection)
將PCollection
作為清單傳遞,但這需要所有元素都能放入記憶體。
範例 8:使用側輸入作為字典的 Map
如果 PCollection
小到足以放入記憶體,則可以將該 PCollection
作為字典傳遞。每個元素都必須是 (key, value)
配對。請注意,PCollection
的所有元素都必須適合此記憶體。如果 PCollection
無法放入記憶體,請改用 beam.pvalue.AsIter(pcollection)
。
範例 9:使用設定和套件內容的 Map。
如果需要昂貴的共用物件,例如資料庫連線,則可以將其作為套件或設定內容傳遞,該內容會像 Python 內容管理員一樣叫用。例如
相關轉換
- FlatMap 的行為與
Map
相同,但對於每個輸入,它可能會產生零個或多個輸出。 - 如果函數只是決定是否要輸出元素,Filter 會很有用。
- ParDo 是最通用的元素式對應作業,並且包括其他功能,例如多個輸出集合和側輸入。
![]() |
上次更新於 2024/10/31
您是否已找到您要尋找的所有內容?
它是否全部有用且清楚?是否有任何您想要變更的地方?請告訴我們!