Spark MLlib (1)

一.概述

  • MapReduce每次读写,都需要序列化到磁盘。一个复杂任务,需要多次处理,几十次磁盘读写
  • Spark只需要一次磁盘读写,大部分处理在内存中进行
  • spark-shell(交互窗口模式):运行spark-shell需要指向申请资源的standalone spark集群信息,其参数为MASTER,还可以指定executor及driver的内存大小。spark-shell启动完成后,可以在交互窗口中输入scala命令,进行操作,其中spark-shell已经默认生成spark对象
  • DataFrame-based API is primary API

1.第一代API:RDD

优点

  • 编译时类型安全,编译时就能检查出类型错误
  • 面向对象的编程风格,直接通过类名点的方式来操作数据

缺点

  • 序列化和反序列化的性能开销,无论是集群间的通信,还是IO操作都需要对对象的结构和数据进行序列化和反序列化
  • GC性能开销,频繁创建和销毁对象,势必会增加GC

2.第二代API:DataFrame

核心特征

  • Schema:包含了ROW为单位的每行数据的列的信息;spark通过schema就能够读懂数据,因此在通信和IO时就只需要序列化和反序列化数据,而结构的部分就可以省略了
  • off-heap:spark能够以二进制的形式序列化数据(不包括结构)到off-heap中,当要操作数据时,就直接操作off-heap内存
  • Tungsten:新的执行引擎
  • Catalyst:新的语法解析框架

优点

  • off-heap就像地盘,schema就像地图,Spark有地图又有自己地盘了,就可以自己说了算了,不再受JVM的限制,也就不再受GC的困扰了,通过schema和off-heap,DataFrame解决了RDD的缺点。对比RDD提升计算效率,较少数据读取,底层计算优化

缺点

  • DataFrame解决了RDD的缺点,但是却丢了RDD的优点。DataFrame不是类型安全的,API也不是面向对象风格的

3.第三代API:DataSet

  • DataSet 核心:Encoder

二.Pipelines的主要概念

spark.ml 提供了基于DataFrames高层次的API,可以用来构建机器学习工作流(pipeline)

DataFrame(数据模型)

  • DataFrame作为ML的数据集
  • ML可以应用于各种各样的数据类型,比如向量,文本,图形和结构化数据。API采用Spark SQL的DataFrame就是为了支持各种各样的数据类型

Transformer(转换器)

  • 转换器是特征变换和机器学习模型的抽象。转换器必须实现transform方法,这个方法将一个DataFrame转换成另一个DataFrame,通常是附加一个或多个列

Estimators(模型学习器)

  • Estimators模型学习器是拟合和训练数据的机器学习算法或者其它算法的抽象
  • Estimators(模型学习器)实现fit()方法,这个方法输入一个DataFrame并产生一个model即一个transformer(转换器)
  • 例如:一个机器学习算法是一个estimator模型学习器,比如这个算法是LogisticRegression,调用fit()方法训练出一个LogisticRegressionModel,这是一个Model,因此也是一个Transformer(转换器)

Pipeline(管道)

  • Pipeline将多个Transformers和Estimators绑在一起形成一个工作流,在机器学习中,通常会执行一系列算法来处理和学习模型,比如,一个简单的文本文档处理流程可能包含这几个步骤:把每个文档的文本分割成单词 → 将这些单词转化成一个数值型特征向量 → 使用特征向量和标签学习一个预测模型
  • MLlib代表一个流水线,就是一个pipeline,pipeline包含了一系列有特定顺序的管道步骤(transformers和estimators)

Parameter(参数)

  • MLlib的Estimators(模型学习器)和Transformer(转换器)使用统一的API来指定参数。Param是具有自包含定义的参数,ParamMap是一组(参数,值)对
  • 将参数传递给算法主要有两种方式

三.Pipelines的实例

  • 一个pipeline由多个步骤组成,每个步骤都是一个Transformer(转换器)或Estimator(模型学习器)
  • 这些步骤按顺序执行,首先输入的DataFrame,然后通过每个阶段进行转换
  • 在Transformer(转换器)步骤中,DataFrame会调用transform()方法
  • 在Estimator(模型学习器)步骤中,fit()方法被调用并产生一个Transformer(转换器)会成为pipelinemodel的一部分,或者适配pipeline,并且dataframe会调用这个transformer的transform()方法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值