
PySpark – collect_list() and collect_set()

Uno de los principales objetivos de PySpark es facilitar el procesamiento de datos a gran escala. Para lograrlo, PySpark cuenta con diferentes funciones que te permiten trabajar con grandes cantidades de información de una manera rápida y eficiente. En este artículo, hablaremos de dos funciones muy útiles para el manejo de datos en PySpark: collect_list() y collect_set().
¿Qué es collect_list()?
La función collect_list() es una función de PySpark que se utiliza para crear una lista en la que los elementos se agregan de manera ordenada. Esta lista se crea a partir de un conjunto de datos que PySpark procesa, y es muy útil cuando se desea tener una lista ordenada de los resultados de diferentes operaciones.
La sintaxis básica de esta función es la siguiente:
collect_list(columna)
Donde "columna" es la columna a partir de la cual se desea crear la lista.
Un ejemplo de uso de collect_list() es el siguiente:
Supongamos que tenemos la siguiente tabla llamada "personas":
| Nombre | Edad |
| --- | --- |
| Juan | 25 |
| Ana | 35 |
| Pedro | 30 |
| Luisa | 25 |
Si ejecutamos la siguiente instrucción en PySpark:
resultado = personas.groupBy("Edad").agg(collect_list("Nombre"))
Obtendremos como resultado una lista ordenada por edades con los nombres correspondientes a cada edad:
| Edad | collect_list(Nombre) |
| --- | --- |
| 25 | [Juan, Luisa] |
| 30 | [Pedro] |
| 35 | [Ana] |
¿Qué es collect_set()?
La función collect_set() es similar a collect_list(), pero en lugar de crear una lista ordenada, crea un conjunto de elementos únicos a partir de los datos procesados por PySpark.
La sintaxis básica de esta función es la siguiente:
collect_set(columna)
Donde "columna" es la columna a partir de la cual se desea crear el conjunto.
Un ejemplo de uso de collect_set() es el siguiente:
Supongamos que tenemos la siguiente tabla llamada "ventas":
| Producto | Cantidad |
| --- | --- |
| Lápiz | 5 |
| Pluma | 10 |
| Borrador | 5 |
| Cuaderno | 8 |
| Carpeta | 4 |
Si ejecutamos la siguiente instrucción en PySpark:
resultado = ventas.groupBy("Cantidad").agg(collect_set("Producto"))
Obtendremos como resultado un conjunto de productos únicos y ordenados por cantidad:
| Cantidad | collect_set(Producto) |
| --- | --- |
| 4 | [Carpeta] |
| 5 | [Borrador, Lápiz] |
| 8 | [Cuaderno] |
| 10 | [Pluma] |
Ejemplos de uso de collect_list() y collect_set()
A continuación, se presentan algunos ejemplos de uso de estas dos funciones:
Ejemplo 1: Crear una lista de valores numéricos a partir de una columna
Supongamos que tenemos una columna llamada "numeros" en la tabla "datos", y queremos crear una lista con los valores numéricos de esta columna:
resultado = datos.agg(collect_list("numeros"))
Este código creará una lista ordenada con los valores de la columna "numeros".
Ejemplo 2: Crear una lista de cadenas de texto a partir de una columna
Supongamos que tenemos una columna llamada "frutas" en la tabla "compras", y queremos crear una lista con los nombres de las frutas compradas:
resultado = compras.agg(collect_list("frutas"))
Este código creará una lista ordenada con los nombres de las frutas compradas.
Ejemplo 3: Crear un conjunto de valores únicos a partir de una columna
Supongamos que tenemos una columna llamada "categorias" en la tabla "productos", y queremos obtener un conjunto de categorías únicas:
resultado = productos.agg(collect_set("categorias"))
Este código creará un conjunto ordenado con las categorías únicas de los productos.
Conclusión
Las funciones collect_list() y collect_set() son muy útiles para el manejo de datos en PySpark, ya que permiten crear listas y conjuntos de datos de manera rápida y eficiente. Si bien comparten algunas características, la principal diferencia entre ellas es que collect_list() crea una lista ordenada, mientras que collect_set() crea un conjunto de elementos únicos. Conocer estas dos funciones es fundamental para cualquier persona que trabaje con grandes cantidades de información en PySpark.
Preguntas frecuentes
¿Puedo utilizar collect_list() y collect_set() en conjunto?
Sí, es posible utilizar ambas funciones juntas. Por ejemplo, si queremos crear una lista de valores únicos de una columna, podemos utilizar la función collect_set() para obtener un conjunto de elementos únicos, y luego aplicar la función collect_list() para crear una lista ordenada con esos elementos.
¿Cuál es la principal diferencia entre collect_list() y collect_set()?
La principal diferencia entre estas dos funciones es que collect_list() crea una lista ordenada con los elementos procesados por PySpark, mientras que collect_set() crea un conjunto de elementos únicos.
¿Puedo utilizar estas funciones en cualquier versión de PySpark?
Sí, estas funciones están disponibles en todas las versiones de PySpark.
¿Cómo puedo saber cuándo usar collect_list() y cuándo usar collect_set()?
La decisión entre utilizar collect_list() o collect_set() depende del tipo de datos que se estén procesando. Si se desea tener una lista ordenada de los resultados, se debe utilizar collect_list(). Si se desea tener un conjunto de elementos únicos, se debe utilizar collect_set().
Ejemplos de código
# Crear una lista de valores numéricos a partir de una columna
resultado = datos.agg(collect_list("numeros"))
# Crear una lista de cadenas de texto a partir de una columna
resultado = compras.agg(collect_list("frutas"))
# Crear un conjunto de valores únicos a partir de una columna
resultado = productos.agg(collect_set("categorias"))
Deja una respuesta