迭代列火花Scala

时间:2016-12-08 11:40:32

标签: scala apache-spark

我想创建一个包含三列的数据框:“变量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变量执行相同操作,以便从结果数据框中找出具有最高相关性的变量

1 个答案:

答案 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")