分割

Pydoc Pydoc




將集合中的元素分成多個輸出集合。分割函式包含邏輯,該邏輯決定如何將輸入集合的元素分成每個產生的分割輸出集合。

分割的數量必須在圖表建構時決定。您無法在管線中途決定分割的數量

請參閱 Beam 程式設計指南 中的更多資訊。

範例

在下列範例中,我們建立一個具有 PCollection 的管線,其中包含農產品及其圖示、名稱和持續時間。然後,我們以多種方式應用 Partition,將 PCollection 分割成多個 PCollection

Partition 接受一個函式,該函式接收分割的數量,並傳回元素所需分割的索引。傳遞的分割數量必須是正整數,並且必須傳回介於 0num_partitions-1 之間的整數。

範例 1:使用函式分割

在下列範例中,我們有一個已知的持續時間清單。我們將 PCollection 分割成每個持續時間類型的一個 PCollection

範例 2:使用 lambda 函式分割

我們也可以使用 lambda 函式來簡化範例 1

範例 3:使用多個引數分割

您可以將具有多個引數的函式傳遞給 Partition。它們會作為額外的位置引數或關鍵字引數傳遞給該函式。

在機器學習中,將資料分割成訓練和測試資料集是一項常見的工作。通常,80% 的資料用於訓練模型,20% 用於測試。

在此範例中,我們將 PCollection 資料集分割成訓練和測試資料集。我們定義了 split_dataset,它採用 plant 元素、num_partitions 和一個額外的引數 ratioratio 是一個數字列表,表示每個分割將包含多少項目的比例。num_partitionsPartitions 用作位置引數,而 plantratio 會傳遞給 split_dataset

如果我們想要 80%/20% 的分割,我們可以指定比例 [8, 2],這表示每 10 個元素中,有 8 個進入第一個分割,2 個進入第二個分割。為了決定將每個元素傳送到哪個分割,我們有不同的儲存桶。在我們的例子中,[8, 2]10 個儲存桶,其中前 8 個儲存桶代表第一個分割,最後 2 個儲存桶代表第二個分割。

首先,我們檢查比例清單的長度是否對應於我們傳遞的 num_partitions。然後,我們取得每個元素的儲存桶索引,範圍從 0 到 9 (num_buckets-1)。我們可以執行 hash(element) % len(ratio),但我們改為對 JSON 表示法的所有 ASCII 字元求和,以使其具有確定性。最後,我們迴圈處理比例中的所有元素,並有一個執行中的總計,以識別該儲存桶對應的分割索引。

這個 split_dataset 函式具有足夠的通用性,可以支援任何比例的任意分割數量。您可能想要調整儲存桶指派,以便為您的資料集使用更合適或隨機化的雜湊。

Pydoc Pydoc