Apache Spark 3.0 机器学习库(MLlib)指南
学习地址:https://spark.apache.org/docs/latest/ml-guide.html
学习目录
MLlib:主要指南
MLlib:基于RDD的API指南
机器学习库(MLlib)指南
MLlib是Spark的机器学习(ML)库。其目标是使实用的机器学习可扩展且容易。在较高级别,它提供了以下工具:
- ML算法:常见的学习算法,例如分类,回归,聚类和协作过滤
- 特征化:特征提取,变换,降维和选择
- 管道:用于构建,评估和调整ML管道的工具
- 持久性:保存和加载算法,模型和管道
- 实用程序:线性代数,统计信息,数据处理等
声明:基于DataFrame的API是主要API
基于MLlib RDD的API现在处于维护模式。
从Spark 2.0开始,软件包中基于RDD的API spark.mllib已进入维护模式。现在,用于Spark的主要机器学习API是软件包中基于DataFrame的API spark.ml。
这意味着什么?
- MLlib仍将
spark.mllib通过错误修复来支持基于RDD的API 。 - MLlib不会向基于RDD的API添加新功能。
- 在Spark 2.x发行版中,MLlib将向基于DataFrames的API添加功能,以与基于RDD的API达到功能奇偶。
为什么MLlib切换到基于DataFrame的API?
- 与RDD相比,DataFrames提供了更加用户友好的API。DataFrames的许多好处包括Spark数据源,SQL / DataFrame查询,Tungsten和Catalyst优化以及跨语言的统一API。
- 用于MLlib的基于DataFrame的API为ML算法和多种语言提供了统一的API。
- DataFrame有助于实际的ML管道,特别是功能转换。有关详细信息,请参见管道指南。
什么是“ Spark ML”?
- “ Spark ML”不是正式名称,但有时用于指代基于MLlib DataFrame的API。这主要归因于
org.apache.spark.ml基于DataFrame的API使用的Scala软件包名称,以及我们最初用来强调管道概念的“ Spark ML Pipelines”一词。
MLlib是否已弃用?
- 不会。MLlib同时包含基于RDD的API和基于DataFrame的API。基于RDD的API现在处于维护模式。但是既不弃用API,也不弃用MLlib。
依存关系
MLlib使用线性代数程序包Breeze,该程序依赖于 netlib-java进行优化的数值处理。如果本机库1在运行时不可用,您将看到警告消息,而将使用纯JVM实现。
由于运行时专有二进制文件存在许可问题,因此netlib-java默认情况下,我们不包含的本机代理。要配置netlib-java/ Breeze使用系统优化的二进制文件,请包含 com.github.fommil.netlib:all:1.1.2(或使用构建Spark -Pnetlib-lgpl)作为项目的依赖项,并阅读netlib-java文档以获取平台的其他安装说明。
最受欢迎的本机BLAS(例如Intel MKL,OpenBLAS)可以在单个操作中使用多个线程,这可能与Spark的执行模型冲突。
将这些BLAS实现配置为使用单个线程进行操作实际上可以提高性能(请参阅SPARK-21305)。通常,最好将此配置与每个Spark任务配置为使用的内核数匹配,默认情况下为1,通常保留为1。
请参考以下资源,以了解如何配置这些BLAS实现使用的线程数:Intel MKL或Intel oneMKL和OpenBLAS。请注意,如果未在系统中正确配置nativeBLAS,则将使用java实现(f2jBLAS)作为后备选项。
要在Python中使用MLlib,您将需要NumPy 1.4版或更高版本。
3.0中的亮点
以下列表突出显示了3.0 Spark版本中添加到MLlib的一些新功能和增强功能:
- 多列支持已添加到
Binarizer(SPARK-23578),StringIndexer(SPARK-11215),StopWordsRemover(SPARK-29808)和PySparkQuantileDiscretizer(SPARK-22796)。 - 添加了基于树的特征转换(SPARK-13677)。
- 添加了两个新的评估器
MultilabelClassificationEvaluator(SPARK-16692)和RankingEvaluator(SPARK-28045)。 - 在
DecisionTreeClassifier/Regressor(SPARK-19591),RandomForestClassifier/Regressor(SPARK-9478),GBTClassifier/Regressor(SPARK-9612),MulticlassClassificationEvaluator(SPARK-24101),RegressionEvaluator(SPARK-24102),BinaryClassificationEvaluator(SPARK-24103),BisectingKMeans(SPARK-30351),KMeans(SPARK -29967)和GaussianMixture(SPARK-30102)。 PowerIterationClustering添加了R API (SPARK-19827)。- 添加了Spark ML侦听器,用于跟踪ML管道状态(SPARK-23674)。
- 适合验证集已添加到Python的Gradient Boosted Trees(SPARK-24333)中。
RobustScaler添加了变压器(SPARK-28399)。Factorization Machines添加了分类器和回归器(SPARK-29224)。- 添加了高斯朴素贝叶斯分类器(SPARK-16872)和互补朴素贝叶斯分类器(SPARK-29942)。
- Scala和Python(SPARK-28958)之间的ML函数奇偶校验。
predictRaw在所有分类模型中公开。predictProbability在除LinearSVCModel(SPARK-30358)之外的所有分类模型中公开。
迁移指南
现在,迁移指南已存档在此页面上。
-
要了解有关系统优化的本机的好处和背景的更多信息,您可能希望观看Sam Halliday的ScalaX关于Scala中的高性能线性代数的演讲。 ↩
MLlib:基于RDD的API
本页记录了MLlib指南中有关基于RDD的API(spark.mllib程序包)的各个部分。请参阅基于DataFrame的API(程序包)的MLlib主指南,该指南spark.ml现在是MLlib的主要API。

浙公网安备 33010602011771号