Bootstrap

spark机器学习中的基本数据类型

今天开始记录spark中机器学习的相关应用。

spark某种意义上讲就是为机器学习准备的,其一,spark是一种内存计算框架,速度快,其二,spark更擅长处理迭代式的数据计算,而迭代运算这是机器学习模型经常遇到的。延申一点,目前大数据还有一种是流式运算,也就是处理的是实时数据,虽然这种spark也可以,但是毕竟是一种伪造的流式。

所以更多时候spark是处理离线的、迭代式的运算。spark里面目前已经集成了专门的机器学习框架mllib,目前为止已经非常丰富成熟了,实乃大数据机器学习领域的必须框架。

机器学习任务第一步要做的一般都是数据准备,包括数据类型以及数据格式,通常情况下特征是以向量或者矩阵的形式进行训练的,spark的基础数据格式是RDD,那么结合机器学习的数据格式是什么样的呢?

  • mllib的基本数据类型

机器学习的特征数据无非两种:向量类型的,矩阵类型的。mllib也是如此,再将数据分为本地的和分布式的,就是四种基本数据类型:
(1)本地的向量
(2)本地的矩阵
(3)分布式的向量(是一种向量标签)
(4)分布式的矩阵

  • 本地的向量

向量应该说是spark机器学习里面最重要的一种结构,在spark里面,有专门根据数组生成可以用的向量的方法,只需要调用一下对应的包即可:

import org.apache.spark.mllib.linalg.{Vector, Vectors}

注意机器学习的所有的数据结构相关的都在org.apache.spark.mllib.linalg这个包里面可以找到。

举个例子假设我们想将array数组变成机器学习的向量,可以如下:

scala> var arr=Array(1.0, 2.0, 3.0, 4.0)
arr: Array[Double] = Array(1.0, 2.0, 3.0, 4.0)
scala> import org.apache.spark.mllib.linalg.{Vector, Vectors}
scala> var vec=Vectors.dense(arr)
vec: org.apache.spark.mllib.linalg.Vector = [1.0,2.0,3.0,4.0]

说起向量,我们自然会想到有两种向量存在:稠密向量

;