簡體   English   中英

Apache Spark中的非線性(DAG)ML管道

[英]Non linear (DAG) ML pipelines in Apache Spark

我已經建立了一個簡單的Spark-ML應用程序,我有一個獨立的變換器管道,可以將列添加到原始數據的數據框中。 由於變壓器不看彼此的輸出,我希望我可以在非線性(DAG)管道中並行運行它們。 我可以找到關於此功能的所有內容來自Spark ML-Guide

只要數據流圖形成有向無環圖(DAG),就可以創建非線性管道。 目前,此圖基於每個階段的輸入和輸出列名稱(通常指定為參數)隱式指定。 如果管道形成DAG,則必須按拓撲順序指定階段。

我對段落的理解是,如果我為每個轉換器設置inputCol(s),outputCol參數並在創建管道時以拓撲順序指定階段,那么引擎將使用該信息來構建執行DAG的階段。一旦輸入就緒,DAG就可以運行了。

關於這個的一些問題:

  • 我的理解是否正確?
  • 如果對於其中一個階段/變換器我沒有指定輸出列(例如,階段僅過濾某些行),會發生什么? 它是否會假設為了DAG創建目的,階段正在改變所有列,以便所有后續階段都應該等待它?
  • 同樣,如果其中一個階段我沒有指定inputCol(s)會發生什么? 舞台是否會等到所有前一階段完成?
  • 我似乎可以指定多個輸入列但只能指定一個輸出列。 如果變換器向數據幀添加兩列(Spark本身沒有問題)會發生什么? 有沒有辦法讓DAG創建引擎了解它?

我的理解是否正確?

不完全是。 因為階段是以拓撲順序提供的,所以您需要做的就是以正確的順序遍歷圖形,從左到右應用PipelineStages 這正是您調用PipelineTransform時會發生的情況。

階段的順序遍歷兩次:

同樣,如果其中一個階段我沒有指定inputCol(s)會發生什么?

幾乎沒什么有趣的。 由於階段是按順序應用的,並且在實際轉換開始之前,給定的Transformer使用其transformSchema方法應用唯一的模式驗證,因此它將作為任何其他階段進行處理。

如果變換器向數據幀添加兩列,會發生什么

與上述相同。 只要它為后續階段生成有效的輸入模式,它與任何其他Transformer沒有什么不同。

變形金剛不看彼此的輸出,我希望我能並行運行它們

從理論上講,您可以嘗試構建一個自定義復合變換器,它封裝了多個不同的變換,但唯一可以獨立執行並從此類操作中受益的部分是模型擬合。 在一天結束時,您必須返回一個可以由下游階段使用的單個轉換的DataFrame ,並且實際轉換最有可能被安排為單個數據掃描。

問題仍然存在,如果真的值得付出努力。 雖然可以同時執行多個作業,但如果可用資源的數量與處理單個作業所需的工作量相比相對較高,則它僅提供一些優勢。 它通常需要一些低級別管理(分區數量,shuffle分區數量),這不是Spark SQL的最強功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM