在Scala中遍历列

在Scala中遍历列,scala,apache-spark,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

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

您应该首先将
RDD[Row]
转换为
RDD[Vector]
,然后您可以简单地使用
Statistics.corr()
使用
rdd
作为输入参数,生成相关矩阵:

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

您应该首先将
RDD[Row]
转换为
RDD[Vector]
,然后您可以简单地使用
Statistics.corr()
RDD
作为输入参数来生成相关矩阵:

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

什么是
g
?你想要所有可能的列组合的相关性吗?是的,这是正确的,
g
到底是什么?你想要所有可能的列组合的相关性吗?是的,这是正确的