转置RDD [Vector]将记录更改为大小为500.000 x 50的csv的属性

时间:2018-03-24 14:03:04

标签: scala apache-spark rdd transpose

我想读取一个csv文件并将其转置以测量属性之间的相关性。但是当我转置它时,我得到以下错误:

  

方法转置的参数不够:(隐式asTraversable:   org.apache.spark.mllib.linalg.Vector =>   scala.collection.GenTraversableOnce [B])序号[SEQ [B]]。未指定的值   参数asTraversable。

涉及默认参数的应用程序出错。

val file = "/data.csv"   
val data = sc.textFile(file).map(line => Vectors.dense(line.split (",").map(_.toDouble).distinct))
val transposedData = sc.parallelize(data.collect.toSeq.transpose)
val correlMatrix: Matrix = Statistics.corr(transposedData, "pearson")
println(correlMatrix.toString)

1 个答案:

答案 0 :(得分:0)

  
    

方法转置的参数不足:(隐式asTraversable:org.apache.spark.mllib.linalg.Vector => scala.collection.GenTraversableOnce [B])Seq [Seq [B]]。未指定的值参数asTraversable。

  

data RDD是org.apache.spark.mllib.linalg.Vector 的集合,即。对象集合。但转置需要收集集合

data.collect.toSeq只是给你Seq[Vector]无法换位的val data = sc.textFile(file).map(line => line.split (",").map(_.toDouble)) val untransposedData = data.map(Vectors.dense(_)) val transposedData = sc.parallelize(data.collect.toSeq.transpose).map(x => Vectors.dense(x.toArray)) val correlMatrix: Matrix = Statistics.corr(transposedData, "pearson") println(correlMatrix.toString)

以下代码应该适合您

distinct

注意: while True: try: member = str(input('Are you a child or adult member? ')) except TypeError: print('Please input letters') 被删除,因为它会使二维矩阵不均匀,从而导致另一个问题。