2017-02-15 1 views
0

Я пытаюсь вычислить корреляцию между двумя функциями, которые считываются из двух отдельных текстовых файлов, как показано ниже.Перегруженный метод value corr с альтернативами

import org.apache.spark.sql.SparkSession 
import org.apache.spark.mllib.stat.Statistics 
import scala.io.Source 

object Corr { 
    def main() { 
      val sparkSession = SparkSession.builder 
       .master("local") 
       .appName("Correlation") 
       .getOrCreate() 

      val sc = sparkSession.sparkContext 


      val feature_1 = Source.fromFile("feature_1.txt").getLines.toArray 
      val feature_2 = Source.fromFile("feature_2.txt").getLines.toArray 

      val feature_1_dist = sc.parallelize(feature_1) 
      val feature_2_dist = sc.parallelize(feature_2) 


      val correlation: Double = Statistics.corr(feature_1_dist, feature_2_dist, "pearson") 
      println(s"Correlation is: $correlation") 
     } 
} 

Corr.main() 

Однако, я получаю следующее сообщение об ошибке:

overloaded method value corr with alternatives: 
    (x: org.apache.spark.api.java.JavaRDD[java.lang.Double],y: org.apache.spark.api.java.JavaRDD[java.lang.Double],method: String)scala.Double <and> 
    (x: org.apache.spark.rdd.RDD[scala.Double],y: org.apache.spark.rdd.RDD[scala.Double],method: String)scala.Double 
cannot be applied to (org.apache.spark.rdd.RDD[String], org.apache.spark.rdd.RDD[String], String) 
     val correlation: Double = Statistics.corr(feature_1_dist, feature_2_dist, "pearson") 

То, что я пытаюсь сделать, выглядит очень похож на пример here, но я не могу понять это.

+1

Что такое 'Статистика'? Можете ли вы добавить свой импорт? Вышеуказанный код не имеет операторов 'import'. – Paul

+0

@Paul Извините. Я только что добавил их. –

+0

Чтение функций в массивах, хранящихся на главном устройстве, уже является подозрительным движением, которое не должно происходить, если функции большие. – Paul

ответ

2

Как указано в сообщении об ошибке, необходимо иметь RDD[Double], но у вас есть RDD[String]. Таким образом, вы можете сделать что-то вроде этого (если у вас есть один номер в строке):

val feature_1 = Source.fromFile("feature_1.txt").getLines.toArray.map(_.toDouble) 
val feature_2 = Source.fromFile("feature_2.txt").getLines.toArray.map(_.toDouble) 
Смежные вопросы