大数据 | Spark机器学习工作流开发指南

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: Spark.ml是在Spark 1.2开始引入的一个包,它旨在提供一套统一的高级API,帮助用户创建和优化实用的机器学习工作流,它在原来的MLlib的基础上进行了大量的改进和优化,让Spark生态更见坚不可摧,本文就来详细介绍一下Spark机器学习工作流的基本概念和用法。

前言

之前我曾写过一篇介绍Spark集群搭建和基本使用的文章,在文中详细的介绍了Spark的来历、优势及搭建过程,Spark以其低时延、速度快、通用性强等优势在大数据处理领域备受欢迎,但是它的强大之处绝不仅仅是因为强大的分布式计算能力。如果你仅仅想借助Spark的并行计算能力,那样我觉得大可不必费尽周折去搭建Spark和HDFS,可以直接借助多线程实现数据的并行处理和读取。

Spark之所以如此强大还得益于它完善的生态系统,它在仓储工具、机器学习等领域也非常完备,这让它能够进一步在大数据上进行一些查找、训练等工作,而不仅仅是作为一个数据读取工具使用。

在Spark 1.2之前它携带的机器学习库是MLlib,它包含了聚类、逻辑回归、SVM等常用的机器学习算法,因此,它也得到了广泛的应用。但是,在机器学习工作流、数据格式、性能方面有所限制,因此,在Spark 1.2之后加入了Spark.ml机器学习库,这是在MLlib之上更高阶的API,它不仅面向DataFrame,在RDD基础上进一步封装,提供更强大更方便的API。另外,比较重要的一点是,它引入了工作流(Pipeline)的概念,将多个单独的算法组合成一个统一的流水线形式,便于实现复杂的机器学习模型,本文就来详细介绍一下Spark.ml机器学习工作流的一些专业术语和基本使用方法。

Spark.ml简介

5.jpg

Spark.ml是在Spark 1.2开始引入的一个包,它旨在提供一套统一的高级API,帮助用户创建和优化实用的机器学习工作流(machine learning pipelines)。

一个完整的机器学习工作流包括多个阶段,

  • 数据预处理
  • 特征抽取
  • 模型训练
  • 交叉验证
  • ......

spark.ml对机器学习算法的API进行了标准化,使得更加容易的将多个算法组合成单个工作流。

在spark.ml中引入了一些关键的专业术语,它们分别是,

ML Dataset:spark.ml不像MLlib那样使用RDD作为数据输入,而是使用更加高阶的DataFrame,它相对于RDD包含了schema信息,它可以支持多种不同的数据类型,例如,文本、特征向量、真实标签、预测标签。

Transformer:它可以被翻译为转换器,是一个工作流阶段(PipelineStage),它的作用是将一个DataFrame转换成另一个DataFrame,从技术上讲Transformer实现了transform()方法。转换器是一种抽象,它包括特征转换器和机器学习模型。

Estimator:它可以被译为评估器,作用是将输入的DataFrame转化成Transformer,在技术上它实现了fit()方法。例如,一个机器学习算法就是Estimator,它的输入为数据集,输出是机器学习模型,这个机器学习模型就是一个Transformer,它能够将一个数据转换成另一个数据。

Pipeline:可以翻译为工作流或者管道,个人认为反义词工作流更加贴切、容易理解。它把多个工作流阶段连接起来,组成一个完整的工作流。例如,简单的文本文档处理工作流可能包括如下几个阶段,

  • 将每个文档的文本拆分为单词。
  • 将每个文档的单词转换成数字特征向量。
  • 使用特征向量和标签学习预测模型。

spark.ml将这样的工作流表示为Pipeline,它按特定的顺序运行一系列Pipeline(Transformer和Estimator)组成。

Param:Param被用来设置 Transformer 或者 Estimator 的参数。

如何运行?

工作流(Pipeline)是只由多个工作阶段组成的序列,每个阶段可以是一个Transformer或者Estimator,这些阶段按照顺序运行,并且输入的数据集在每个阶段时都会被修改。

在Transformer阶段,在数据集上调用transform()方法,在Estimator阶段,调用fit()方法以生成一个Transformer(它将成为PipelineModel或者拟合Pipeline的一部分), 并且在数据集上调用该Transformer的transform()方法。

下图是工作流训练时的使用情况,用来说明简单的文本文档处理工作流程,

6.png

在上图中,第一行代表了三个阶段的工作流,前两个(Tokenizer和HashingTF)是转换器(蓝色框),第三个阶段(Logistic Regression)是评估器(红色框)。

第二行代表了流经工作流的数据情况,其中圆柱体代表DataFrame。Tokenizer.transform()方法将原始文本文档(Raw text)拆分为单词,在数据集中添加带有单词的新列。HashingTF.transform()方法将words列转换为特征向量,并将带有这些向量的新列添加到数据集。然后,由于LogisticRegression是Estimator,因此管道首先调用LogisticRegression.fit()来生成LogisticRegressionModel。如果管道有更多阶段,则在将数据集传递到下一阶段之前,将在数据集中调用LogisticRegressionModel的transform()方法。

经过上述工作流,将产生一个PipelineModel,它是一个Transformer,这个模型在测试数据上使用的工作流如下,


7.png


在上图中,PipelineModel和原始Pipeline阶段数相同,但是原始Pipeline中的所有Estimator都已变为Transformer。在测试数据集上调用PipelineModel的transform()方法时,数据将按顺序传递给工作流。每个阶段的transform()方法都会更新数据集,并将其传递到下一个阶段。

Spark.ML实战

下面就以一个简单的实例来构造一个逻辑回归(LogisticRegression)工作流,来加深一下对上述流程的理解和印象。

在spark.ml实战中假设这样一个场景,一个句子(sentence)中,如果包含单词"flower",那么它的标签为1,否则为0。

导入模块

从前面讲解中我们可以清楚的知道,在构造这个工作流中,我们会用到Tokenizer、HashingTF、DataFrame、LogisticRegression、Pipeline,我们在程序开头先导入这些模块,

 
         

构造数据集

了解了示例背景,下面我们分别来构造训练集DataFrame和测试集DataFrame,

 
         

构建Pipeline

我们首先要来构造上面第一个图中的Pipeline(Estimator),在构建这个工作流时我们需要用到Tokenizer、HashingTF进行分词和抽取特征,然后调用逻辑回归算法,生成PipelineModel,

 
         

然后通过Pipeline把上述三个阶段连接起来,构成工作流,

 
         

可以看出,上面输出一个PipelineModel。

构建PipelineModel

下面要完成的就是上面第二幅图中的工作流,在测试集上面首先调用PipelineModel,然后通过多个阶段的数据传递,最终输出预测结果,

 
         

上述就是基本的Spark.ml应用实例。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
17天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
52 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
18天前
|
SQL 机器学习/深度学习 分布式计算
Spark快速上手:揭秘大数据处理的高效秘密,让你轻松应对海量数据
【10月更文挑战第25天】本文全面介绍了大数据处理框架 Spark,涵盖其基本概念、安装配置、编程模型及实际应用。Spark 是一个高效的分布式计算平台,支持批处理、实时流处理、SQL 查询和机器学习等任务。通过详细的技术综述和示例代码,帮助读者快速掌握 Spark 的核心技能。
47 6
|
16天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
62 2
|
17天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
57 1
|
17天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
18天前
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
48 1
|
28天前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
36 1
|
1月前
|
消息中间件 分布式计算 Kafka
大数据平台的毕业设计02:Spark与实时计算
大数据平台的毕业设计02:Spark与实时计算
|
机器学习/深度学习 分布式计算 大数据
Spark机器学习之推荐引擎
spark是现在非常流行的一个计算框架,本文重要是用spark框架做推荐系统的实现。
3728 0
|
机器学习/深度学习 分布式计算 Apache
Spark机器学习3·推荐引擎(spark-shell)
![](http://img3.douban.com/lpic/s28277325.jpg) [Spark机器学习](http://book.douban.com/subject/26593179/) ### 准备环境 - jblas https://gcc.
2702 0