Cómo obligar a Spark a evaluar las operaciones de DataFrame en línea

De acuerdo con laSpark RDD docs:

Todas las transformaciones en Spark son perezosas, ya que no calculan sus resultados de inmediato ... Este diseño permite que Spark se ejecute de manera más eficiente.

Hay momentos en que necesito hacer ciertas operaciones en mis marcos de datosjusto entonces y ahora. Pero debido a que las operaciones de marco de datos son "evaluado perezosamente"(según lo anterior), cuando escribo estas operaciones en el código, hay muy poca garantía de que SparkRealmente ejecutar esas operaciones en línea con el resto del código. Por ejemplo:

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

Entonces, mi solución para esto (hasta ahora) ha sido ejecutar.show() o.count() inmediatamente después de mi operación de marco de datos urgente, así:

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

...cualefectivo Spark para ejecutar el marco de datos op en ese momento, en línea.

Esto se siente terriblemente hacky / kludgy para mí. Entonces pregunto:¿Existe una forma más generalmente aceptada y / o eficiente defuerza ¿Las operaciones de marco de datos se realizan bajo demanda (y no se evalúan perezosamente)?

Respuestas a la pregunta(2)

Su respuesta a la pregunta