Dataset

randomSplit 随机数据切分

Spark API使用 - 图1

  1. //数据及做切分 0.7训练数据 0.3测试数据
  2. val Array(trainingData,testData)=dataset.randomSplit(Array(0.7,0.3))

Vectors

dense:创建密集型向量

Spark API使用 - 图2

  1. val data = Seq(
  2. Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
  3. Vectors.dense(4.0, 5.0, 0.0, 3.0),
  4. Vectors.dense(6.0, 7.0, 0.0, 8.0),
  5. Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))
  6. )

sparse:创建稀疏型向量

Spark API使用 - 图3

// 创建稀疏矩阵,指定元素的个数、索引及非零值,数组方式
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 ) ```