Używam iskry z scala i mam RDD pełne tuple2 zawierające złożony obiekt jako klucz i podwójne. Celem jest dodanie podwójnej (częstotliwości), jeśli obiekt jest identyczny.reduceByKey przy użyciu obiektu Scala jako klucza
za to mam mojego obiektu zdefiniowano następująco:
case class SimpleCoocurrence(word:String, word_pos:String, cooc:String, cooc_pos:String, distance:Double) extends Ordered[SimpleCoocurrence]{
def compare(that: SimpleCoocurrence) = {
if(this.word.equals(that.word)&&this.word_pos.equals(that.word_pos)
&&this.cooc.equals(that.cooc)&&this.cooc_pos.equals(that.cooc_pos))
0
else
this.toString.compareTo(that.toString)
}
}
teraz próbuję wykorzystywać reduceBykey tak:
val coocRDD = sc.parallelize(coocList)
println(coocRDD.count)
coocRDD.map(tup=>tup).reduceByKey(_+_)
println(coocRDD.count)
Ale wynik pokazuje, że przed i RDD po przetworzeniu redubykey zawiera dokładnie taką samą liczbę elementów.
Jak mogę wykonać reduByKey za pomocą tuple2 [SimpleCoocurrence, Double]? Czy wdrażanie cechy uporządkowanej jest dobrym sposobem, aby powiedzieć Sparkowi, jak porównać moje obiekty? Czy powinienem używać tylko tuple2 [String, Double]?
thx,
https://issues.apache.org/jira/browse/SPARK-10493 – yanghaogn