2017-04-26 75 views
2

相对较新的Scala和星火API工具包,但我试图利用向量汇编输入星火斯卡拉数据框柱为Vector

http://spark.apache.org/docs/latest/ml-features.html#vectorassembler

到再利用矩阵的相关性

的问题

https://spark.apache.org/docs/2.1.0/mllib-statistics.html#correlations

数据帧列是D型细胞linalg.Vector的

val assembler = new VectorAssembler() 

val trainwlabels3 = assembler.transform(trainwlabels2) 

trainwlabels3.dtypes(0) 

res90: (String, String) = (features,[email protected]) 

但仍然将此调用到统计工具的RDD会引发不匹配错误。

val data: RDD[Vector] = sc.parallelize(
    trainwlabels3("features") 
) 

<console>:80: error: type mismatch; 
found : org.apache.spark.sql.Column 
required: Seq[org.apache.spark.mllib.linalg.Vector] 

在此先感谢您的帮助。

回答

1

你应该只选择:

val features = trainwlabels3.select($"features") 

转换为RDD

val featuresRDD = features.rdd 

map

featuresRDD.map(_.getAs[Vector]("features")) 
0

这应该为你工作:

val rddForStatistics = new VectorAssembler() 
    .transform(trainwlabels2) 
    .select($"features") 
    .as[Vector] //turns Dataset[Row] (a.k.a DataFrame) to DataSet[Vector] 
    .rdd 

但是,您应该避免使用RDD,并根据DataFrame的API(在spark.ml包中)找出您想要的结果,因为使用RDD s在MLlib中几乎不推荐使用。