Unterschied beim Serialisieren eines Lazy Val mit oder ohne @Transient

8

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.

%Vor%

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.

  1. Was ist der Vorteil, wenn wir bei der Serialisierung @transient auf die nicht initialisierte lazy val setzen?

  2. 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?

  3. 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.

    
Hao Ren 13.01.2016, 14:27
quelle

1 Antwort

3

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.

    
David Ahern 07.11.2017 17:04
quelle