MLlib是Spark的機器學習(ML)庫。旨在簡化機器學習的工程實踐工做,並方便擴展到更大規模。MLlib由一些通用的學習算法和工具組成,包括分類、迴歸、聚類、協同過濾、降維等,同時還包括底層的優化原語和高層的管道API。html
MLllib目前分爲兩個代碼包:java
spark.mllib
包含基於RDD的原始算法API。spark.ml
則提供了基於DataFrames 高層次的API,能夠用來構建機器學習管道。
咱們推薦您使用spark.ml,由於基於DataFrames的API更加的通用並且靈活。不過咱們也會繼續支持spark.mllib包。用戶能夠放心使用,spark.mllib還會持續地增長新的功能。不過開發者須要注意,若是新的算法可以適用於機器學習管道的概念,就應該將其放到spark.ml包中,如:特徵提取器和轉換器。python
下面的列表列出了兩個包的主要功能。git
雖然還有些降維技術在spark.ml中尚不可用,不過用戶能夠將spark.mllib中的的相關實現和spark.ml中的算法無縫地結合起來。github
MLlib使用的線性代數代碼包是Breeze,而Breeze又依賴於 netlib-java 優化的數值處理。若是在運行時環境中這些原生庫不可用,你將會收到一條警告,然後spark會使用純JVM實現來替代之。算法
因爲許可限制的緣由,spark在默認狀況下不會包含netlib-Java的原生代理庫。若是須要配置netlib-java/Breeze使用其系統優化庫,你須要添加依賴項:com.github.fommil.netlib:all:1.1.2(或者在編譯時加上參數:-Pnetlib-lgpl),而後再看一看 netlib-java 相應的安裝文檔。sql
要使用MLlib的Python接口,你須要安裝NumPy 1.4以上的版本。apache
MLlib目前還在積極的開發當中。因此標記爲 Experimental / DeveloperApi 的接口可能在將來發生變化,下面的遷移指南說明了版本升級後的變化。編程
從1.5到1.6,spark.mllib 和 spark.ml 包中並無重大的API變化,不過有一些行爲再也不支持或者發生變化。markdown
已經廢棄:
行爲有變:
spark.mllib.tree.GradientBoostedTrees
: validationTol
的語義在1.6中有變。原先其表明偏差變化絕對值的一個閾值,而如今它相似於GradientDescent中的convergenceTol:對於較大的偏差,使用相對偏差(相對於上一次);而對於較小的偏差(<0.01),使用絕對偏差。
Tokenizer
transformer的行爲相匹配。之前版本的遷移指南歸檔在這裏:on this page