首页 文章

计算Spark DataFrame上的Spearman相关性

提问于
浏览
1

我想对目前在Spark DataFrame中的数据运行Spearman关联 . 目前,只有Pearson相关性计算可用于对DataFrame中的列进行操作 . 看来我可以使用Spark的MLlib进行Spearman相关,但我需要将两个RDD [Double]传递给函数 . 根据当前架构,我要比较的列是Double .

有没有办法选择我想要的列并使其成为双打数组,以便我可以使用MLlib相关函数来获得Spearman相关系数?

3 回答

  • 0

    您只需选择感兴趣的列,提取值并计算统计数据:

    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

    你应该可以做这样的事情

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

    在scala中,您可以使用以下内容 . 我假设你正确地从rdd创建了数据帧 .

    df.select(corr($"Column1",$"Column2")).show()
    
    +----------------------+
    |corr(Column1, Column2)|
    +----------------------+
    | 0.40962234447942202  |
    +----------------------+
    

相关问题