tutorial sqlcontext spark read example espaƱol apache-spark dataframe

apache spark - sqlcontext - Spark DataFrames: registerTempTable versus not



spark sql tutorial (2)

Hay un buen benchmark comparando RDD vs. dataframe vs. SparkSQL performance:

Spark RDDs vs DataFrames vs SparkSQL

Aparentemente GroupBy con recuento y clasificación de los grupos fue notablemente más rápido con SparkSQL.

Si tiene un trabajo de misión crítica, podría tener sentido implementarlo en ambos sentidos para comparar el tiempo y el rendimiento.

Empecé con DataFrame ayer y realmente me gusta hasta ahora.

Sin embargo, no entiendo una cosa ... (refiriéndose al ejemplo en "Especificación de programación del esquema" aquí: https://spark.apache.org/docs/latest/sql-programming-guide.html#programmatically-specifying-the-schema )

En este ejemplo, el marco de datos se registra como una tabla (supongo que para proporcionar acceso a consultas SQL ...) pero la misma información exacta a la que se accede también puede ser hecha por peopleDataFrame.select ("nombre").

Entonces la pregunta es ... ¿Cuándo le gustaría registrar un dataframe como una tabla en lugar de simplemente usar las funciones de dataframe dadas? ¿Y una opción es más eficiente que la otra?


La razón para utilizar el método registerTempTable( tableName ) para un DataFrame es que, además de poder utilizar los métodos proporcionados por Spark de un DataFrame , también puede emitir consultas SQL a través del sqlContext.sql( sqlQuery ) , que usa ese DataFrame como una tabla SQL. El parámetro tableName especifica el nombre de la tabla que se utilizará para ese DataFrame en las consultas SQL.

val sc: SparkContext = ... val hc = new HiveContext( sc ) val customerDataFrame = myCodeToCreateOrLoadDataFrame() customerDataFrame.registerTempTable( "cust" ) val query = """SELECT custId, sum( purchaseAmount ) FROM cust GROUP BY custId""" val salesPerCustomer: DataFrame = hc.sql( query ) salesPerCustomer.show()

Si utilizar SQL o DataFrame métodos como select y groupBy es probablemente una cuestión de preferencia. Tengo entendido que las consultas SQL se traducen en planes de ejecución de Spark.

En mi caso, encontré que ciertos tipos de consultas de agregación y creación de ventanas que necesitaba, como calcular un saldo en ejecución por cliente, estaban disponibles en el lenguaje de consulta SQL de Hive, que sospecho que habría sido muy difícil de hacer en Spark.

Si desea utilizar SQL, lo más probable es que desee crear un HiveContext lugar de un SQLContext regular. El lenguaje de consulta de Hive admite un rango de SQL más amplio que el disponible a través de un SQLContext simple.