Quando usar a API Spark DataFrame / Dataset e quando usar RDD simples?

O mecanismo de execução Spark SQL DataFrame / Dataset possui várias otimizações de tempo e espaço extremamente eficientes (por exemplo, InternalRow e expressão codeGen). De acordo com muitas documentações, parece ser uma opção melhor que o RDD para a maioria dos algoritmos distribuídos.

No entanto, eu fiz algumas pesquisas de código fonte e ainda não estou convencido. Não tenho dúvidas de que o InternalRow é muito mais compacto e pode economizar grande quantidade de memória. Mas a execução de algoritmos pode não ser mais rápida, salvando expressões predefinidas. Ou seja, é indicado no código fonte deorg.apache.spark.sql.catalyst.expressions.ScalaUDF, que toda função definida pelo usuário faz três coisas:

converta o tipo de catalisador (usado no InternalRow) para o tipo scala (usado no GenericRow).aplique a funçãoconverta o resultado de volta do tipo scala para o tipo catalisador

Aparentemente, isso é ainda mais lento do que apenas aplicar a função diretamente no RDD sem nenhuma conversão. Alguém pode confirmar ou negar minha especulação através de perfis reais e análise de código?

Muito obrigado por qualquer sugestão ou insight.

questionAnswers(1)

yourAnswerToTheQuestion