Dataset
randomSplit 随机数据切分

//数据及做切分 0.7训练数据 0.3测试数据val Array(trainingData,testData)=dataset.randomSplit(Array(0.7,0.3))
Vectors
dense:创建密集型向量

val data = Seq(Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),Vectors.dense(4.0, 5.0, 0.0, 3.0),Vectors.dense(6.0, 7.0, 0.0, 8.0),Vectors.sparse(4, Seq((0, 9.0), (3, 1.0))))
sparse:创建稀疏型向量

// 创建稀疏矩阵,指定元素的个数、索引及非零值,数组方式
scala> val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))
sv1: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])
// 创建稀疏矩阵,指定元素的个数、索引及非零值,采用序列方式
scala> val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0)))
sv2: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])
密集向量和稀疏向量的区别
密集向量的值就是一个普通的Double数组 而稀疏向量由两个并列的 数组indices和values组成 例如:向量(1.0,0.0,1.0,3.0)用密集格式表示为[1.0,0.0,1.0,3.0],用稀疏格式表示为(4,[0,2,3],[1.0,1.0,3.0]) 第一个4表示向量的长度(元素个数),[0,2,3]就是indices数组,[1.0,1.0,3.0]是values数组 表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0<br />稀疏向量 [1] 通常用两部分表示:一部分是顺序向量,另一部分是值向量。例如稀疏向量(4,0,28,53,0,0,4,8)可用值向量(4,28,53,4,8)和顺序向量(1,0,1,1,0,0,1,1)表示。
VectorAssembler
应用实例
将csv中的多个列合并到features列中,再进行模型训练等操作。
val assembler = new VectorAssembler()
.setInputCols(Array("Channel","Region","Fresh","Milk","Grocery","Frozen","Detergents_Paper","Delicassen"))
.setOutputCol("features")
val kmeans = new KMeans().setK(2).setSeed(1L)
val pipeline = new Pipeline().setStages(Array(assembler,kmeans))
PipelineModel
stages:获取步骤模型数组
- 取出中间步骤的模型参数
```java
val kmeans = new KMeans()
.setInitMode("k-means||") .setFeaturesCol("pcaFeatures") .setK(K) .setMaxIter(3) .setSeed(1L) .setTol(0.01)
val pipeline = new Pipeline() .setStages(Array(method_indexer, status_indexer, agent_indexer,content_type_indexer,tld_indexer,assembler,pca,kmeans))
val model = pipeline.fit(featureDF)
//取出kmeans模型的参数 model.stages(7).asInstanceOf[KMeansModel].clusterCenters
<a name="tw2Ql"></a>
## DataFrame
<a name="W6fBi"></a>
### withColumn 增加一列
val col = functions.concat(df.col(“jqlbbh”),df.col(“jqlxbh”)) val ndf = df.withColumn(“type”,col ) ```
