MLlib使用的本地化存储类型是向量,这里的向量主要由两类构成:稀疏型数据集(spares)和密集型数据集(dense)
- MLlib库的基本类型:向量类型 Vector
- 主要向Spark提供一组可进行操作的数据集合
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.Vectors
object VectorsTest {
def main(args: Array[String]): Unit = {
//
val v1 = Vectors.dense(1.2, 2.3, 4.5)
println(v1)
println(v1(0))
// 通过Array[Double]的方式传入
val v2 = Vectors.dense(Array[Double](1.2, 3.4, 34.1))
println(v2)
//处理vector.txt文件 RDD[String]->RDD[Vector]
val conf = new SparkConf().setMaster("local").setAppName("vector")
val sc = new SparkContext(conf)
val data = sc.textFile("d://data/ml/vector.txt")
val v3 = data.map{line=>line.split(" ").map{str=>str.toDouble}}
.map{arr=>Vectors.dense(arr)}
v3.foreach(println)
}
}
- MLlib库的基本类型:向量标签类型 LabeledPoint
- 让用户能够分类不同的数据集合
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
object LabeledPointTest {
def main(args: Array[String]): Unit = {
val v1 = Vectors.dense(1.2,1.3,1.6)
//创建标签类型:参数①:标签值 参数②:向量
val lb1 = LabeledPoint(1,v1)
//获取标签值
println(lb1.label)
//获取向量
println(lb1.features)
//处理vector.txt RDD[String] -> RDD[LabeledPoint]
val conf = new SparkConf().setMaster("local").setAppName("vector2")
val sc = new SparkContext(conf)
val data = sc.textFile("d://data/ml/vector.txt")
// val lb2 = data.map{line=>line.split(" ").map(str => str.toDouble)}
// .map(arr=>Vectors.dense(arr))
// .map(vector => LabeledPoint(vector(0),vector))
val lb2 = data.map{line=>
val info = line.split(" ")
val lable =info(0).toDouble //标签值也为Double
val vector = info.drop(1).map{str=>str.toDouble}
LabeledPoint(lable,Vectors.dense(vector))
}
lb2.foreach(println)
}
}