2017-06-01 22 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文件中花費的時間要多得多。請告訴我如何更新代碼以獲取相關矩陣如果我使用第二種方法,非常感謝 –