我想创建一个包含三列的数据框:“变量1”,“变量2”,来自200个变量的给定数据帧的“相关性”
现在对于数据框中的任何两列,我使用以下代码来计算相关性
import sqlContext.implicits._
import org.apache.spark.mllib.stat.Statistics
// Generate some random data
scala.util.Random.setSeed(1)
val df = sc.parallelize(g.sample(1000).zip(g.sample(1000))).toDF("x", "y")
// Select columns and extract values
val rddX = df.select($"x").rdd.map(_.getDouble(0))
val rddY = df.select($"y").rdd.map(_.getDouble(0))
val correlation: Double = Statistics.corr(rddX, rddY, "spearman")
如何对数据框中的一组x变量执行相同操作,以便从结果数据框中找出具有最高相关性的变量
答案 0 :(得分:2)
您应首先将RDD[Row]
转换为RDD[Vector]
,然后只需使用Statistics.corr()
作为输入参数rdd
来生成相关矩阵:< / p>
import org.apache.spark.mllib.linalg.Vectors
val rdd_vec = df.rdd.map(row => {
Vectors.dense(row.toSeq.toArray.map({
case d: Double => d
}))
})
val correlMatrix = Statistics.corr(rdd_vec, "spearman")