Tôi đang sử dụng tia lửa có scala và tôi có RDD đầy đủ tuple2 chứa một đối tượng phức tạp làm khóa và tăng gấp đôi. Mục đích là để thêm đôi (tần số) nếu đối tượng là giống hệt nhau.reduceByKey sử dụng đối tượng Scala làm khóa
cho rằng tôi đã xác định đối tượng của tôi như sau:
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)
}
}
bây giờ tôi đang cố gắng sử dụng reduceBykey như thế:
val coocRDD = sc.parallelize(coocList)
println(coocRDD.count)
coocRDD.map(tup=>tup).reduceByKey(_+_)
println(coocRDD.count)
Nhưng, kết quả cho thấy rằng RDD trước và sau khi xử lý một reducebykey chứa chính xác cùng một số yếu tố.
Tôi làm cách nào để thực hiện reduceByKey bằng tuple2 [SimpleCoocurrence, Double]? Có phải thực hiện đặc tính được sắp xếp theo cách tốt để cho Spark biết cách so sánh các đối tượng của tôi không? Tôi có nên sử dụng chỉ tuple2 [String, Double]?
thx,
https://issues.apache.org/jira/browse/SPARK-10493 – yanghaogn