儘管spark ml管道提供了各種各樣的演算法,你仍可能想要額外的功能,並且不脫離管道模型。在spark mllib中,這算不上什麼問題,你可以通過rdd的變換來實現你自己的演算法,並繼續下去。對於spark ml 管道來說,同樣的方法是可行的,但是我們會失去一些管道所具備的優良特性,包括自動執行元演算法的能力,例如交叉驗證的引數搜尋。在本文中,你會從標準的wordcount例子入手(在大資料方面,你是不可能真正躲開wordcount例子的),了解到如何擴充套件spark ml 管道模型。
為了將你自己的演算法加入spark管道中來,你需要實現estimator或者是transformer,它們都實現了pipelinestage介面。對於那些不需要訓練的演算法,你可以實現transformer介面,而對於那些需要訓練的演算法,你需要實現estimator介面,它們都定義在org.apache.spark.ml下(都實現了基類 pipelinestage)。要說明的是,訓練並不是只限於複雜的機器學習模型,即使是最大最小值區間縮放器也需要訓練來確定範圍。如果你的演算法需要訓練,它們必須以estimator來構建而不是transformer。
注:直接使用pipelinestage是不可行的,因為管道內部使用了反射機制,假定了所有的管道stage要麼是乙個estimator,要麼就是transformer。
除了顯而易見的transform和fit方法,所有的管道的stage需要提供transformschema,以及乙個copy構造器或者實現乙個可以為你提供這些功能的類。copy是用來製作乙個當前stage的拷貝,合併入任何新指定的引數,可以簡稱為defaultcopy(除非你的類對構造器有特別的考慮)。
自定義轉換
using system using system.collections.generic using system.linq using system.text 使用explicit 顯式 和implicit 隱式 namespace 自定義轉換 set 隱式轉換,自定義的limitedint型別...
自定義型別轉換
這裡說點平常不怎麼用的知識 也不建議在專案中執行,因為增加閱讀 成本 自定義型別轉換,有兩型別 一是型別間隱式轉換,一是型別間強制轉換。定義格式 訪問修飾符 static 轉換修飾操作符 operator 型別 引數列表 轉換修飾操作符 class myage public myage privat...
C 中的自定義型別轉換
using system using system.collections.generic using system.text 使用者自定義轉換 所有的使用者自定義轉換都是靜態的,要使用static關鍵字 使用者自定義轉換分顯示和隱示,它們用implicit 隱式轉換 或 explicit 顯示轉換...