我想对目前在Spark DataFrame中的数据运行Spearman关联。目前,只有Pearson相关性计算可用于对DataFrame中的列进行操作。看来我可以使用Spark的MLlib进行Spearman相关,但我需要将两个RDD [Double]传递给该函数。根据当前架构,我要比较的列是Double。
有没有办法选择我想要的列并使其成为双打数组,以便我可以使用MLlib相关函数来获得Spearman相关系数?
答案 0 :(得分: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")
答案 1 :(得分:0)
你应该可以做这样的事情
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")
答案 2 :(得分:0)
在scala中,您可以使用以下内容。我假设你正确地从rdd创建了数据帧。
df.select(corr($"Column1",$"Column2")).show() +----------------------+ |corr(Column1, Column2)| +----------------------+ | 0.40962234447942202 | +----------------------+