Spark SQL consultas vs funciones de dataframe

Para realizar un buen rendimiento con Spark. Me pregunto si es bueno usar consultas sql a través de SQLContext o si es mejor hacer consultas a través de funciones de df.select() como df.select() .

¿Alguna idea? 🙂

No hay diferencia de rendimiento en absoluto. Ambos métodos usan exactamente el mismo motor de ejecución y estructuras de datos internas. Al final del día todo se reduce a las preferencias personales.

  • Podría DataFrame consultas de DataFrame son mucho más fáciles de construir mediante progtwigción y proporcionan un tipo mínimo de seguridad.

  • Las consultas SQL simples pueden ser mucho más concisas y fáciles de entender. También son portátiles y se pueden usar sin modificaciones con cada idioma admitido. Con HiveContext estos también se pueden usar para exponer algunas funcionalidades que pueden ser inaccesibles de otras maneras (por ejemplo, UDF sin envolturas Spark).

Idealmente, el catalizador de Spark debería optimizar ambas llamadas al mismo plan de ejecución y el rendimiento debería ser el mismo. Cómo llamar es solo una cuestión de tu estilo. En realidad, hay una diferencia acorde con el informe de Hortonworks ( https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html ), donde SQL supera los Dataframes para un caso cuando necesita registros GROUPed con su total de COUNTS que son SORT DESCENDING por nombre de registro.

Al usar DataFrame, uno puede dividir el SQL en múltiples declaraciones / consultas, lo que ayuda a la depuración, mejoras fáciles y mantenimiento del código.

Romper consultas SQL complejas en consultas más simples y asignar el resultado a un DF proporciona una mejor comprensión.

Al dividir la consulta en múltiples DF, el desarrollador obtiene la ventaja de usar caché, reparación (para distribuir datos de manera uniforme en las particiones usando una clave única / cercana a la única).