Wenn ich an Spark arbeite, muss ich manchmal bei jeder Aufgabe ein nicht serialisierbares Objekt senden.
Ein allgemeines Muster ist @transient lazy val
, z. B.
Ich habe festgestellt, dass @transient
hier nicht notwendig ist. lazy val
kann die Nicht-Serialisierung bereits bei Ausführung jeder Aufgabe erstellen. Aber Leute schlagen vor, @transient
zu benutzen.
Was ist der Vorteil, wenn wir bei der Serialisierung @transient
auf die nicht initialisierte lazy val
setzen?
Macht es Sinn, einen nicht initialisierten val
transient für die Serialisierung zu erstellen, in dem Wissen, dass nichts serialisiert wird, wie im obigen Beispiel?
Wie wird% @transient lazy val
serialisiert? Wird es als eine Methode oder etwas anderes behandelt?
Einige Details zum Serialisieren von @transient lazy val
und dem kompilierten Java-Bytecode sind genial.
siehe hier - Ссылка
In Scala bezeichnet lazy val ein Feld, das erst berechnet wird, wenn es zum ersten Mal aufgerufen wird und dann für zukünftige Referenz gespeichert wird. Mit @transient dagegen kann man ein Feld bezeichnen, das nicht serialisiert werden soll.
Tags und Links scala serialization apache-spark lazy-initialization transient