Entradas

Agregaciones básicas en Spark

Introducción Una de las tareas más común trabajando con Spark son las agregaciones. Por ejemplo, en SQL haríamos lo siguiente: Select avg(salario) as SalarioMedia from empleados group by genero Esto nos calcula la media de salario para cada genero. ¿Cómo se hace esto en Spark? Pues curiosamente hay muchas formas, podemos recurrir a spark-sql y ejecutar exactamente esa query, pero personalmente no me gusta NADA hacer uso de spark-sql, por lo tanto, eliminamos una de las maneras de realizarlo 😄. La forma más correcta (desde mi punto de vista, claro) de escribir eso sería: empleados.groupBy($"genero").agg(functions.avg($"salario") as "SalarioMedia") DataFrame.groupBy "DataFrame. groupBy" (o Dataset, no importa, recordemos que DataFrame = Dataset[Row]) es una funcion que tienen todos los dataframe para poder realizar agregaciones, es importante entender que esta función NO devuelve un dataframe , sino un RelationalGroupedDataset , que sería un data...

Optimizar joins: Tabla de hechos y tabla de dimensión cruzadas

Imagen
Vamos a simular un caso en el que se nos solicita realizar un desarrollo y debemos hacerlo lo más eficiente posible. Requerimientos solicitados Se nos ha solicitado, dada una tabla de empleados y una tabla de categorías de empleados, recuperar el id de empleado y el codigo especial que le corresponde a cada uno. La tabla grande tiene el siguiente esquema: id (bigint): Id del empleado id_categoria (int): Id de la categoría en la que se encuentra el empleado salario (int): Sueldo del empleado dimension1 (string): Otra dimensión no necesaria dimension2 (string): Otra dimensión no necesaria La tabla de dimensión tiene este esquema: id (bigint): id de la dimensión datos_extra1 (int): Información no necesaria datos_extra2 (int): Información no necesaria datos_extra3 (int) : Información no necesaria codigo_especial (string): El código que se nos ha requerido recuperar Generación de la tablas Introducción Para la generación de los...

Generación de datos aleatorios con Dataframe

Imagen
Para hacer pruebas, especialmente cuando de habla de optimización, es muy útil poder generar una tanda de datos aleatorios con cierto control. Lo primero que se nos viene a la cabeza es crear una lista muy grande y distribuirla, pero... Esto es un problema si quieres crear 10 millones de registros. Función Spark.range Esta función de spark nos permite crear un dataframe con una columna id, tendrá tantos registros como le indiquemos. import org.apache.spark.sql.SparkSession object GeneradorAleatorio { def main(args: Array[String]): Unit = { val spark = SparkSession .builder .appName("GeneradorAleatorio") .getOrCreate() val df_1M = spark.range(1000000) } } Con esto, ya tenemos un dataframe con 1 millon de registros con un id incremental, desde 0 hasta 999.999. La creación de las columnas la haremos mediante UDFs (o cualquier otra funcionalidad de los dataframe). Veamos algunos ejemplos de columnas útiles, qué columnas crear depend...

Entradas populares de este blog

Agregaciones básicas en Spark

Optimizar joins: Tabla de hechos y tabla de dimensión cruzadas

Generación de datos aleatorios con Dataframe