Wie erzwinge ich, dass Spark DataFrame-Vorgänge inline auswertet?

Laut demSpark RDD docs:

Alle Transformationen in Spark sind insofern faul, als sie ihre Ergebnisse nicht sofort berechnen ... Durch dieses Design kann Spark effizienter ausgeführt werden.

Es gibt Zeiten, in denen ich bestimmte Vorgänge an meinen Datenrahmen ausführen muss damals und heute. Aber weil DataFrame Ops "lazily evaluiert "(siehe oben), wenn ich diese Operationen in den Code schreibe, gibt es nur eine sehr geringe Garantie, dass Sparktatsächlic Führe diese Operationen inline mit dem Rest des Codes aus. Beispielsweise

val someDataFrame : DataFrame = getSomehow()
val someOtherDataFrame : DataFrame = getSomehowAlso()
// Do some stuff with 'someDataFrame' and 'someOtherDataFrame'

// Now we need to do a union RIGHT HERE AND NOW, because
// the next few lines of code require the union to have
// already taken place!
val unionDataFrame : DataFrame = someDataFrame.unionAll(someOtherDataFrame)

// Now do some stuff with 'unionDataFrame'...

So meine Problemumgehung für diese (bisher) wurde ausgeführt.show() oder.count() Unmittelbar nach meinem zeitkritischen DataFrame-Vorgang:

val someDataFrame : DataFrame = getSomehow()
val someOtherDataFrame : DataFrame = getSomehowAlso()
// Do some stuff with 'someDataFrame' and 'someOtherDataFrame'

val unionDataFrame : DataFrame = someDataFrame.unionAll(someOtherDataFrame)
unionDataFrame.count()  // Forces the union to execute/compute

// Now do some stuff with 'unionDataFrame'...

...welche Forces Spark, um den Datenrahmen direkt dort auszuführen, inline.

Das fühlt sich für mich furchtbar kitschig an. Deshalb frage ich: Gibt es einen allgemeineren und / oder effizienteren Weg zuMach dataframe ops on-demand passieren (und nicht faul ausgewertet werden)?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage