Hier ist der Code:Funken RDD Aggregat Aktion verhält sich seltsam
val email1 = sc.textFile("/Users/kaiyin/IdeaProjects/learnSpark/src/main/resources/ling-spam/ham/3-378msg3.txt")
val email2 = sc.textFile("/Users/kaiyin/IdeaProjects/learnSpark/src/main/resources/ling-spam/ham/3-378msg4.txt")
val email = email1 ++ email2
println(s"Count check: ${email.count() == email1.count() + email2.count()}")
val partitionLengths = email.aggregate(Vector.empty[Int])((vec, s) => s.length +: vec, (i1, i2) => i1 ++ i2)
println(partitionLengths)
println(partitionLengths.sum == email.map(_.length).sum)
val partitionLengthsMax = email.aggregate(0)((i: Int, s: String) => {
println(s"Partition length: ${s.length}")
i + s.length
}, (i1, i2) => i1.max(i2))
println(partitionLengthsMax)
dies in einem ers Rennen gibt diese:
Count check: true
Vector(244, 0, 31, 96, 0, 23)
true
Partition length: 23
Partition length: 0
Partition length: 96
Partition length: 31
Partition length: 0
Partition length: 244
275
Zunächst einmal, warum gibt es 6 Partitionen, wenn das Setup local[4]
ist ? Und warum ist die maximale Länge nicht 244? Anscheinend 275 = 244 + 31.
Der komplette Skript kann hier gefunden werden: https://github.com/kindlychung/learnSpark/blob/master/src/main/scala/RDDDemo.scala