2015-08-24 4 views
1

Я хотел бы запустить корреляцию Spearman на данных, которые в настоящее время находятся в Spark DataFrame. В настоящее время доступен только расчет корреляции Пирсона для работы с столбцами в DataFrame. Похоже, что я могу сделать корреляцию Спирмена с помощью MLLib Spark, но мне нужно передать два RDD [Double] в функцию. Столбцы, которые я хочу сравнить, являются Double в соответствии с текущей схемой.Вычислить корреляцию Spearman на Spark DataFrame

Есть ли способ выбрать столбцы, которые я хочу, и сделать массив парными, чтобы я мог использовать корреляционную функцию MLlib для получения коэффициента корреляции Спирмена?

ответ

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

В Скале вы можете использовать следующее. Я предполагаю, что вы правильно создали dataframe из rdd.

df.select(corr($"Column1",$"Column2")).show() 

+----------------------+ 
|corr(Column1, Column2)| 
+----------------------+ 
| 0.40962234447942202 | 
+----------------------+