我想对当前在Spark DataFrame中的数据运行Spearman相关性。目前,只有Pearson相关性计算可用于对DataFrame中的列进行操作。似乎我可以使用Spark的MLlib进行Spearman关联,但我需要将两个RDD[Double]传递给函数。根据当前模式,我要比较的列是Double。
是否有一种方法来选择我想要的列,并使其成为double数组,以便我可以使用MLlib相关函数来获得Spearman相关系数?
您可以简单地选择感兴趣的列,提取值并计算统计信息:
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")
你应该能够做这样的事情
val firstRDD: RDD[Double] = yourDF.select("field1").map(row => row.getDouble(0))
val secondRDD: RDD[Double] = yourDF.select("field2").map(row => row.getDouble(0))
val corr = Statistics.corr(firstRDD, secondRDD, "spearman")