2016-12-08 119 views
0

我想创建的数据帧具有三列:从200个变量迭代火花的Scala

现在用于在任何两列的给定数据帧“变量1”,“可变2”,“相关性”据帧我使用下面的代码来计算相关

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

什么'g'到底是什么?你是否想要列的所有可能组合的相关性? – mtoto

+0

是的,这是正确的 –

回答

0

首先只选择您所在的那些列nt来检查它们是否相关。然后,您可以通过df.columns访问列名,该列返回所有列名称的数组。然后,您可以通过嵌套循环选择2,他们的名字存储在Tuple2 colNames,并通过访问它们:

df(colNames._1) 

df(colNames._2) 

我希望这有助于。

2

你应该先转换您的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")