地圖

Pydoc Pydoc




在集合中的每個元素上應用簡單的 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 採用 textchars 作為引數。

範例 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 內容管理員一樣叫用。例如

Pydoc Pydoc