1.本地向量 Local Vector
import org.apache.spark.mllib.linalg.{Vector,Vectors}
/*
* 本地向量 Local Vector
* */
object scalaTest {
def main(args: Array[String]): Unit = {
// 创建一个稠密本地向量
val dv: Vector = Vectors.dense(3.0, 0.0, 6.0,0.0,9.0)
// 创建一个稀疏本地向量
// 方法第二个参数数组指定了非零元素的索引,而第三个参数数组则给定了非零元素值
val sv1: Vector = Vectors.sparse(5, Array(0, 2, 4), Array(3.0, 6.0, 9.0))
// 另一种创建稀疏本地向量的方法
// 方法的第二个参数是一个序列,其中每个元素都是一个非零值的元组:(index,elem)
val sv2: Vector = Vectors.sparse(5, Seq((0, 3.0), (2, 6.0),(4, 9.0)))
println(dv)
println(sv1.toDense)
println(sv2)
}
}
2.标注点 LabeledPoint
import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
/*
* 标注点 LabeledPoint
* 是一种带标签的本地向量,通常用于监督学习中,标签是双精度浮点型
* 在实际的机器学习问题中,大多数是稀疏向量数据,MLlib提供了读取LIBSVM格式数据的支持,
* 该格式被广泛用于LIBSVM、LIBLINEAR等机器学习库。
* */
object LabeledPointTest {
def main(args: Array[String]): Unit = {
val pos = LabeledPoint(1.0, Vectors.dense(3.0, 0.0, 6.0,0.0,9.0))
val neg = LabeledPoint(0.0, Vectors.sparse(5, Array(0, 2, 4), Array(3.0, 6.0, 9.0)).toDense)
println(pos)
println(neg)
// 用loadLibSVMFile方法读入LIBSVM格式数据
//!!!注意:如果在Windows上执行,指定Hadoop的Home
System.setProperty("hadoop.home.dir", "D:\\temp\\hadoop-2.4.1\\hadoop-2.4.1")
//不打印日志
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
val conf = new SparkConf().setAppName("LogisticRegressionExample").setMaster("local")
val sc = new SparkContext(conf)
// sample_libsvm_data.txt为spark自带的一个示例,位于$SPARK_HOME$/data/mllib/sample_libsvm_data.txt
val examples = MLUtils.loadLibSVMFile(sc, "D:\\maven\\repository\\spark-2.1.0\\data\\mllib\\sample_libsvm_data.txt")
println(examples) //返回的是组织成RDD的一系列LabeledPoint
println(examples.collect().head) //examples.collect()把rdd转换为了向量,并取第一个元素的值。每个标注点共有692个维,其中第127列对应的值是51.0,第128列对应的值是159.0,依此类推。
}
}