【问题标题】:Calculate Spearman Correlation on a Spark DataFrame在 Spark DataFrame 上计算 Spearman 相关性
【发布时间】:2015-08-24 19:47:33
【问题描述】:
我想对当前在 Spark DataFrame 中的数据运行 Spearman 关联。目前,只有 Pearson 相关计算可用于对 DataFrame 中的列进行操作。看来我可以使用 Spark 的 MLlib 进行 Spearman 关联,但我需要将两个 RDD[Double] 传递给函数。根据当前架构,我要比较的列是 Double。
有没有办法选择我想要的列并使其成为一个双精度数组,以便我可以使用 MLlib 相关函数来获取 Spearman 相关系数?
【问题讨论】:
标签:
scala
apache-spark
apache-spark-sql
【解决方案1】:
您可以简单地选择感兴趣的列、提取值和计算统计信息:
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")
【解决方案2】:
你应该可以做这样的事情
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")