die folgende Fall Klasse Gegeben:Verschlechtert die Serialisierung die Spark-Leistung?
case class User(name:String, age:Int)
Ein RDD
von einem List
von Instanzen Benutzer
Der folgende Code erstellt wird, um die RDD filtert Benutzer von 50 über das Alter entfernen
trait Process {
def test {
val rdd = ... // create RDD
rdd.filter(_.age>50)
}
}
Um die Protokollierung hinzuzufügen, wird eine separate Überprüfungsfunktion erstellt und wie folgt an den Filter übergeben:
trait Process {
def validate(user:User) {
if (user.age>50) {
true
}
else {
println("FAILED VALIDATION")
false
}
}
def test {
val rdd = ... // create RDD
rdd.filter(validate)
}
}
Die folgende Ausnahme ausgelöst:
org.apache.spark.SparkException: Task not serializable
Der Code, indem die Klasse arbeitet, in dem die Prüf-Funktion ist serializable definiert:
trait Process extends Serializable
Ist dies der richtige Weg, um die Task not serializable
zu handhaben Ausnahme oder gibt es eine Leistungseinbuße bei der Verwendung der Serialisierung in Spark? Gibt es bessere Möglichkeiten, dies zu tun?
Dank
Tzach, danke. Um den Workflow und die Funktionen, aus denen er besteht, zu definieren, ist es besser, Klassen vollständig zu vermeiden und nur Objekte zu verwenden? – user1052610
Ich denke, es ist eine ziemlich übliche Praxis - entweder _anonymous_ Funktionen oder die Funktion eines Objekts als RDD-Transformationen zu verwenden. –