2017-06-01 44 views
1

我在加载数据时使用apache spark在csv文件上应用相关性我有义务跳过第一行作为数据集中列的标题,否则我无法加载数据。向Spark中的相关矩阵添加标头

我得到了相关性计算,但是当我得到相关矩阵时,我无法将列名作为头添加到新矩阵中。如何获得带有标题的矩阵?这是我曾尝试:

import org.apache.spark.mllib.linalg.{ Vector, Vectors } 
import org.apache.spark.mllib.stat.Statistics 
import org.apache.spark.mllib.linalg.Matrix 
import org.apache.spark.rdd.RDD 

val data = sc.textFile(strfilePath).mapPartitionsWithIndex { 
    case (index, iterator) => if (index == 0) iterator.drop(1) else iterator 
} 

val inputMatrix = data.map { line => 
    val values = line.split(",").map(_.toDouble) 
    Vectors.dense(values) 
} 

val correlationMatrix = Statistics.corr(inputMatrix, "pearson") 

回答

1

火花2.0+,你可以使用命令的CSV文件加载到数据帧:

val df = spark.read.option("header", "true").option("inferSchema", "true").csv("filePath") 

不同列之间的相关性然后可以用

计算
df.stat.corr("col1", "col2", "pearson") 
+0

你是说,我需要加载数据作为数据框,如果我想操纵列? –

+0

@MaherHTB你不需要,但它更容易,因为所有的列根据你的标题名称。然而,另一种方法是使用当前的方法,并使用'Source.fromFile(filename).getLines.head'单独从文件中单独读取头文件。 – Shaido

+0

我问过你,因为将Dataframe保存为csv文件的事实比将RDD [Vector]或矩阵保存在csv文件中花费的时间要多得多。请告诉我如何更新代码以获取相关矩阵如果我使用第二种方法,非常感谢 –