遷移指南:MLlib(機器學習)

請注意,此遷移指南說明了特定於 MLlib 的項目。在將 MLlib 遷移到基於 DataFrame API 的更高版本時,可以套用許多 SQL 遷移項目。請參閱 遷移指南:SQL、資料集和 DataFrame

從 MLlib 2.4 升級到 3.0

重大變更

不建議使用和行為變更

不建議使用

行為變更

從 MLlib 2.2 升級到 2.3

重大變更

不建議使用和行為變更

不建議使用

行為變更

從 MLlib 2.1 升級到 2.2

重大變更

沒有重大變更。

不建議使用和行為變更

不建議使用

沒有棄用事項。

行為變更

從 MLlib 2.0 升級到 2.1

重大變更

已移除已棄用的方法

不建議使用和行為變更

不建議使用

行為變更

從 MLlib 1.6 升級到 2.0

重大變更

Spark 2.0 中有幾個重大變更,如下所述。

用於基於 DataFrame 的 API 的線性代數類別

Spark 的線性代數相依項已移至新的專案 mllib-local(請參閱 SPARK-13944)。在此變更中,線性代數類別已複製至新套件 spark.ml.linalg。現在 spark.ml 中的基於 DataFrame 的 API 相依於 spark.ml.linalg 類別,導致一些重大變更,主要在於各種模型類別(請參閱 SPARK-14810 以取得完整清單)。

注意:spark.mllib 中的基於 RDD 的 API 仍相依於先前的套件 spark.mllib.linalg

轉換向量和矩陣

雖然大多數管道元件支援載入的向下相容性,但某些現有的 DataFrames 和 Spark 版本 2.0 之前的管道(包含向量或矩陣欄)可能需要移轉到新的 spark.ml 向量和矩陣類型。在 spark.mllib.util.MLUtils 中,可以找到將 DataFrame 欄從 spark.mllib.linalg 轉換為 spark.ml.linalg 類型(反之亦然)的公用程式(反之亦然)。

也有可用的公用程式方法,用於轉換向量和矩陣的單一執行個體。對 mllib.linalg.Vector / mllib.linalg.Matrix 使用 asML 方法,以轉換為 ml.linalg 類型,並使用 mllib.linalg.Vectors.fromML / mllib.linalg.Matrices.fromML 轉換為 mllib.linalg 類型。

from pyspark.mllib.util import MLUtils

# convert DataFrame columns
convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
# convert a single vector or matrix
mlVec = mllibVec.asML()
mlMat = mllibMat.asML()

請參閱 MLUtils Python 文件,以取得進一步的詳細資訊。

import org.apache.spark.mllib.util.MLUtils

// convert DataFrame columns
val convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
val convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
// convert a single vector or matrix
val mlVec: org.apache.spark.ml.linalg.Vector = mllibVec.asML
val mlMat: org.apache.spark.ml.linalg.Matrix = mllibMat.asML

請參閱 MLUtils Scala 文件,以取得進一步的詳細資訊。

import org.apache.spark.mllib.util.MLUtils;
import org.apache.spark.sql.Dataset;

// convert DataFrame columns
Dataset<Row> convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF);
Dataset<Row> convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF);
// convert a single vector or matrix
org.apache.spark.ml.linalg.Vector mlVec = mllibVec.asML();
org.apache.spark.ml.linalg.Matrix mlMat = mllibMat.asML();

請參閱 MLUtils Java 文件,以取得進一步的詳細資訊。

已移除已棄用的方法

spark.mllibspark.ml 套件中,已移除多個已棄用的方法

可以在 SPARK-14810 找到中斷變更的完整清單。

不建議使用和行為變更

不建議使用

spark.mllibspark.ml 套件中的不建議事項包括

行為變更

spark.mllibspark.ml 套件中的行為變更包括

從 MLlib 1.5 升級到 1.6

spark.mllibspark.ml 套件中沒有中斷 API 變更,但有棄用和行為變更。

不建議使用

行為變更

從 MLlib 1.4 升級到 1.5

spark.mllib 套件中,沒有中斷 API 變更,但有數個行為變更

spark.ml 套件中,有一個重大 API 變更和一個行為變更

從 MLlib 1.3 升級到 1.4

spark.mllib 套件中,有幾個重大變更,但都在 DeveloperApiExperimental API 中

spark.ml 套件中,發生了幾項重大 API 變更,包括

由於 spark.ml API 是 Spark 1.3 中的 alpha 元件,因此我們不會在此列出所有變更。然而,由於 1.4 spark.ml 不再是 alpha 元件,因此我們將提供未來版本中所有 API 變更的詳細資訊。

從 MLlib 1.2 升級到 1.3

spark.mllib 套件中,有幾個重大變更。第一個變更(在 ALS 中)是元件中唯一未標記為 Alpha 或 Experimental 的變更。

spark.ml 套件中,主要的 API 變更來自 Spark SQL。我們在此列出最重要的變更

其他變更在於 LogisticRegression

從 MLlib 1.1 升級到 1.2

MLlib v1.2 中唯一的 API 變更在於 DecisionTree,它在 MLlib 1.2 中仍然是實驗性質的 API

  1. (重大變更)分類的 Scala API 會使用指定類別數目的命名參數。在 MLlib v1.1 中,此參數在 Python 中稱為 numClasses,在 Scala 中稱為 numClassesForClassification。在 MLlib v1.2 中,兩個名稱都設為 numClasses。此 numClasses 參數透過 StrategyDecisionTree 靜態 trainClassifiertrainRegressor 方法指定。

  2. (重大變更)Node 的 API 已變更。這通常不會影響使用者程式碼,除非使用者手動建構決策樹(而非使用 trainClassifiertrainRegressor 方法)。樹狀 Node 現在包含更多資訊,包括預測標籤的機率(用於分類)。

  3. 列印方法的輸出已變更。toString(Scala/Java)和 __repr__(Python)方法用於列印完整模型;現在則列印摘要。如需完整模型,請使用 toDebugString

Spark 分發中的範例和 決策樹指南 中的範例已做相應更新。

從 MLlib 1.0 升級到 1.1

MLlib v1.1 中唯一的 API 變更在於 DecisionTree,它在 MLlib 1.1 中仍為實驗性 API。

  1. (重大變更)樹狀深度意義已變更 1,以符合 scikit-learnrpart 中樹狀實作。在 MLlib v1.0 中,深度 1 樹狀結構有 1 個葉節點,而深度 2 樹狀結構有 1 個根節點和 2 個葉節點。在 MLlib v1.1 中,深度 0 樹狀結構有 1 個葉節點,而深度 1 樹狀結構有 1 個根節點和 2 個葉節點。此深度由 Strategy 中的 maxDepth 參數或 DecisionTree 靜態 trainClassifiertrainRegressor 方法指定。

  2. (非重大變更)我們建議使用新增加的 trainClassifiertrainRegressor 方法來建構 DecisionTree,而非使用舊參數類別 Strategy。這些新的訓練方法明確區分分類和迴歸,並以簡單的 String 類型取代專門的參數類型。

新的建議 trainClassifiertrainRegressor 的範例說明在 決策樹指南 中。

從 MLlib 0.9 升級到 1.0

在 MLlib v1.0 中,我們以統一的方式支援密集和稀疏輸入,這會引進一些重大變更。如果您的資料是稀疏的,請將它儲存在稀疏格式,而不是密集格式,以在儲存和運算中利用稀疏性。詳細資訊說明如下。