Je me demande pourquoi le compilateur Scala ne peut pas déduire le type du paramètre de ma fonction lorsque j'utilise PairDStreamFunctions.reduceByKey, voici le code :
val ssc = new StreamingContext(conf, Seconds(10))
ssc.checkpoint(".checkpoint")
val lines = ssc.socketTextStream("localhost", 9999)
val words = lines.flatMap(_.split(" "))
val wordCounts = words
.map((_, 1))
.reduceByKey((x: Int, y: Int) => x + y, 4) //here i must specify the type Int,and this format can't work : reduceByKey((x, y) => x + y, 4)
aquí Je dois spécifier le type Int de mon paramètre de fonction comme reduceByKey((x : Int, y : Int) => x + y, 4) quand j'utilise PairDStreamFunctions .reduceByKey ,et ce format ne pouvait pas travailler : reduceByKey((x, y) => x + y, 4) .
D'autre part, lorsque j'utilise l'api PairRDDFunctions.reduceByKey, il peut déduire le type, voici le code :
val conf = new SparkConf()
val sc = new SparkContext(conf)
val rdd = sc.parallelize(List(
"hi what"
, "show you"
, "matter how"
))
rdd.flatMap(_.split(" "))
.map((_, 1))
.reduceByKey((x, y) => x + y, 4)//in this code,scala compiler could infer the type of my function parameter (x,y) => x+y
Lorsque j'utilise PairRDDFunctions .reduceByKey, reduceByKey((x, y) => x + y, 4) pourrait fonctionner. Je ne comprends vraiment pas ce qui la rend différente.