一、前情提要
spark的组成部分:
**Spark Core:**Spark最核心的模块,可以基于多种语言实现代码类的离线开发 【类似于MR】
Spark SQL:类似于Hive,基于SQL进行开发,SQL会转换为SparkCore离线程序 【类似Hive】
Spark Streaming:基于SparkCore之上构建了准实时的计算模块 【淘汰了】
Struct Streaming:基于SparkSQL之上构建了结构化实时计算模块 【替代了Spark Streaming】
Spark ML lib:机器学习算法库,提供各种机器学习算法工具,可以基于SparkCore或者SparkSQL实现开发。

本次主题是介绍Spark ML lib:机器学习算法库,提供各种机器学习算法工具,可以基于SparkCore或者SparkSQL实现开发
一说到机器学习就能想到大数据,介绍前先来看一下两者间的联系与区别:
首先,回顾大数据的4V特征:
1.数据量大
TB-PB-ZB
HDFS分布式文件系统
2.数据种类多
结构化数据-Mysql为主的存储和处理
非结构化数据-文本、图像、音频-HDFS、MR、Hive
半结构化数据-XML、HTML形式-HDFS、MR、Hive、Spark
3.速度快
数据的增长速度快-TB-PB-ZB- HDFS
数据的处理的速度快MR-HIVE-PIG-Impala(离线)-Spark-Flink(实时)
4.价值密度低
价值密度=有价值的数据/ALL、价值高
机器学习算法解决的问题
大数据框架实现基础的数据存储和数据计算,如果从大量的数据中发现和挖掘出有价值的信息,需要借助机器学习算法,结合数据,构建机器学习模型实现对现实事件的预测。不同于以往的硬编码规则的方式,机器学习是通过机器学习算法发现或挖掘出数据中存在的规律或模式。
二、Spark 机器学习
在大数据时代,传统单机机器学习工具难以处理 TB 级甚至 PB 级数据,而Spark 机器学习凭借分布式计算能力,成为海量数据建模的核心工具。
Spark 的机器学习功能主要通过MLlib(Machine Learning Library) 实现,其演进过程中形成了两套 API:
类型 | 基于的数据结构 | 特点 | 适用场景 |
---|---|---|---|
MLlib(旧 API) | RDD(弹性分布式数据集) | 底层 API,操作灵活但代码繁琐,支持基础算法 | 简单分布式计算、自定义底层逻辑 |
ML(新 API) | DataFrame(结构化数据集) | 高阶 API,支持流水线(Pipeline)、特征工程、模型调优,易用性强 | 复杂机器学习流程、企业级应用 |
推荐优先使用 ML API,其核心设计更贴近实际业务场景!!!
Spark 机器学习库目前分为两个包:spark.mllib、spark.ml。
spark.mllib 包含基于 RDD 的机器学习 API。Spark MLlib 由来已久,在 1.0 以前的版本就已经包含,提供的算法丰富稳定,目前处于维护状态,不再添加新功能。其核心功能如下:
**数据准备:**包括用于特征提取和变换、分类特征的散列和导入预言模型标记语言构建的模型。
**常见算法:**包括流行的回归、频繁模式挖掘、分类和聚类算法。
**实用功能:**实现了常用的统计方法和模型评估方法。
Spark 机器学习(ML)的核心优势源于其分布式架构 和内存计算特性,相比传统工具(如 Scikit-learn)或其他大数据框架(如 MapReduce),具有以下不可替代的优势:
-
处理超大规模数据
Spark 支持将数据分片存储在集群节点中,通过并行计算突破单机内存和算力限制,可轻松处理从 GB 到 PB 级的数据。例如,电商平台的用户行为分析(每日千万级日志)、物联网设备的传感器数据建模(百万级设备实时数据)等场景,都能高效完成。
-
速度提升 10-100 倍
基于内存计算(而非磁盘),Spark 避免了频繁的 IO 操作,训练速度比 MapReduce 快 10 倍以上;同时支持 DAG(有向无环图)优化执行计划,进一步提升计算效率。
-
无缝集成大数据生态
可直接读取 HDFS、Hive、Kafka 等数据源的数据,无需额外数据迁移,完美融入 Hadoop 生态,适合企业级大数据平台架构。
-
统一批处理与流处理
同一套 API 可同时支持批处理(离线建模)和流处理(实时预测),例如用 Spark ML 训练的模型,可直接部署到 Spark Streaming 中处理实时数据。
其核心功能如下:
- 机器学习算法:回归、分类和聚类等。
- 特征化方法:特征提取、转换、降维和选择等。
- 管道方法:包括创建、评估和优化管道等。
- 持久化方法:包括保存和加载算法、模型和管道等。
- 实用功能:如线性代数、统计相关的计算实现
三、ml和mllib的主要区别和联系
ml和mllib都是Spark中的机器学习库,目前常用的机器学习功能2个库都能满足需求。
spark官方推荐使用ml, 因为ml功能更全面更灵活,未来会主要支持ml,mllib很有可能会被废弃(据说可能是在spark3.0中deprecated)。
ml主要操作的是DataFrame, 而mllib操作的是RDD,也就是说二者面向的数据集不一样。相比于mllib在RDD提供的基础操作,ml在DataFrame上的抽象级别更高,数据和操作耦合度更低。
DataFrame和RDD什么关系?DataFrame是Dataset的子集,也就是Dataset[Row], 而DataSet是对RDD的封装,对SQL之类的操作做了很多优化。
相比于mllib在RDD提供的基础操作,ml在DataFrame上的抽象级别更高,数据和操作耦合度更低。
ml中的操作可以使用pipeline, 跟sklearn一样,可以把很多操作(算法/特征提取/特征转换)以管道的形式串起来,然后让数据在这个管道中流动。大家可以脑补一下Linux管道在做任务组合时有多么方便。
ml中无论是什么模型,都提供了统一的算法操作接口,比如模型训练都是fit;不像mllib中不同模型会有各种各样的trainXXX。
mllib在spark2.0之后进入维护状态, 这个状态通常只修复BUG不增加新功能。
(一) MLlib机器学习库概述
1.1 MLlib的架构与组件
MLlib是Apache Spark的机器学习(ML)库,它将常见的机器学习算法和实用工具集成到了Spark平台中。MLlib具有易于使用的API,能够处理大规模数据并提供与Spark平台的无缝集成。MLlib的架构主要由以下组件构成:
算法库 :包含各种常见的机器学习算法,如分类、回归、聚类、协同过滤等。
底层优化原语 :提供了基础的数学操作和优化算法,如线性代数、统计和随机数据生成等。
管道API :提供了一种机器学习工作流的高级API,使得数据预处理、特征提取、模型训练和评估等操作能够被串联起来。
实用工具 :包含各种辅助工具,例如模型评估、数据导入导出等。
1.2 MLlib支持的算法种类
MLlib支持多种类型的机器学习算法,覆盖了监督学习和非监督学习的主要领域:
分类 :包括逻辑回归、决策树、随机森林、梯度提升决策树等。
回归 :例如线性回归、决策树回归、梯度提升回归等。
聚类 :如K-means、高斯混合模型、谱聚类等。
协同过滤 :用于个性化推荐系统,支持基于用户和基于物品的协同过滤。
降维 :如奇异值分解(SVD)、主成分分析(PCA)等。
频繁模式挖掘 :支持FP-Growth算法。
优化算法 :如线性规划、二次规划等。
1.3MLlib的基础操作
3.1 特征提取与转换
在机器学习中,特征工程是一个至关重要的步骤,良好的特征表示是模型能否成功的关键。MLlib提供了丰富的特征提取和转换工具,使得从原始数据到特征向量的转换变得简单高效。
TF-IDF :文本特征提取中的常见技术。
Word2Vec :将词语转换为向量形式。
OneHotEncoder :用于类别特征的转换。
StandardScaler :标准化连续特征。
PCA :主成分分析用于降维。
3.2 模型评估与选择
模型评估是机器学习中的另一个重要环节。MLlib提供了多种评估工具,用于衡量模型的性能。
分类模型评估 :准确度、精确度、召回率、F1分数、ROC曲线下面积(AUC)等。
回归模型评估 :均方误差(MSE)、均方根误差(RMSE)、决定系数(R²)等。
聚类模型评估 :轮廓系数等。
在选择模型时,除了评估指标之外,还需考虑模型的复杂度、计算资源消耗、模型的解释性等因素。
3.3 MLlib的常见算法应用
1 分类与回归算法
分类 和 回归 是机器学习中的两个核心任务。分类问题的目标是将实例数据分配到特定的类别中,而回归问题则预测一个连续的输出值。
分类算法应用 :以逻辑回归为例,它是一种广泛应用于二分类问题的算法。通过最大化似然函数,逻辑回归将输入向量映射到0到1之间的概率值。
回归算法应用 :线性回归模型是回归分析中最基础也是最常用的一种算法,用于预测一个因变量与一个或多个自变量之间的关系。
2 聚类与协同过滤
聚类算法和协同过滤算法常用于无标签数据的分析。
聚类算法应用 :K-means是最常见的聚类算法之一,它将n个数据点划分成k个簇,使得每个数据点属于离它最近的均值(即簇的中心)所代表的簇。
协同过滤应用 :用户基于历史行为和偏好来进行物品推荐,这种方法广泛应用于电商和娱乐推荐系统。
(二).ml库
3.1 ml介绍和组成
可以参考
官方文档
ML API包含三个主要的抽象类:Transformer(转换器),Estimator(预测器)和Pipline(管道)
转换器:是一种算法,可以将一个DataFrame转换成另一个DataFrame。
预测器:是一个算法,可以基于DataFrame产出一个转换器。是学习算法或者其他算法的抽象,用来训练数据。
管道:链接多个转换器和预测器生成一个机器学习工作流。管道被指定为一系列阶段,每个阶段是一个转换器或一个预测器。
3.2spark.ml机器学习流程
- 源数据ETL
- 数据预处理:如从pandas的DataFrame到Spark的DataFrame;将字符型特征转化为数值
- 特征提取
- 模型的训练和验证