web-dev-qa-db-fra.com

la méthode reductionByKey est introuvable dans Scala Spark

Tentative d'exécuter http://spark.Apache.org/docs/latest/quick-start.html#a-standalone-app-in-scala à partir du code source.

Cette ligne:

val wordCounts = textFile.flatMap(line => line.split(" ")).map(Word => (Word, 1)).reduceByKey((a, b) => a + b)

est en train de lancer une erreur 

value reduceByKey is not a member of org.Apache.spark.rdd.RDD[(String, Int)]
  val wordCounts = logData.flatMap(line => line.split(" ")).map(Word => (Word, 1)).reduceByKey((a, b) => a + b)

logData.flatMap(line => line.split(" ")).map(Word => (Word, 1)) renvoie un MappedRDD mais je ne trouve pas ce type dans http://spark.Apache.org/docs/0.9.1/api/core/index.html#org.Apache.spark.rdd.RDD

J'utilise ce code depuis le code source de Spark, ce qui pourrait poser un problème de classpath. Mais les dépendances requises sont sur mon classpath.

24
blue-sky

Vous devez importer les conversions implicites de SparkContext:

import org.Apache.spark.SparkContext._

Ils utilisent le modèle 'pimp up my library' pour ajouter des méthodes aux RDD de types spécifiques. Si vous êtes curieux, voir SparkContext: 1296

35
maasg

En fait, vous pouvez le trouver dans la classe PairRDDFunctions. PairRDDFunctions est une classe contenant des fonctions supplémentaires disponibles sur les RDD de paires (clé, valeur) via une conversion implicite.

https://spark.Apache.org/docs/2.1.0/api/scala/index.html#org.Apache.spark.rdd.PairRDDFunctions

0
Hongyang

Si vous utilisez maven sur ScalaIDE, je viens de résoudre le problème en mettant à jour la dépendance de la version 1.2 à la version spark. 

0
Ws576