Como forçar o Spark a avaliar as operações do DataFrame em linha

De acordo comDocumentos do Spark RDD:

Todas as transformações no Spark são preguiçosas, pois não computam seus resultados imediatamente ... Esse design permite que o Spark seja executado com mais eficiência.

Há momentos em que preciso fazer certas operações nos meus quadros de dadosnaquele momento e agora. Mas porque as operações de dataframe são "preguiçosamente avaliado"(conforme acima), quando escrevo essas operações no código, há muito pouca garantia de que o Spark irána realidade execute essas operações alinhadas com o restante do código. Por exemplo:

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

Portanto, minha solução alternativa para isso (até agora) foi executar.show() ou.count() imediatamente após minha operação de dataframe sensível ao tempo, da seguinte maneira:

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

...qualforças Spark para executar o dataframe op logo em seguida, inline.

Isso parece terrivelmente hacky / kludgy para mim. Então eu pergunto:existe uma maneira mais geralmente aceita e / ou eficiente deforça as operações de dataframe acontecem sob demanda (e não são avaliadas preguiçosamente)?

questionAnswers(2)

yourAnswerToTheQuestion