Volver a la página principal
martes 11 febrero 2025
7

Cómo usar la función aggregate() en Spark con Python

En PySpark, la función aggregate() permite realizar operaciones de agregación personalizadas sobre un RDD (Resilient Distributed Dataset). A diferencia de funciones como reduce(), aggregate() proporciona mayor control, permitiendo definir valores iniciales y funciones separadas para combinaciones locales y globales.

Sintaxis de aggregate()

rdd.aggregate(zeroValue, seqOp, combOp)

Parámetros:

1. zeroValue: Valor inicial de la agregación (puede ser 0, una lista vacía, etc.).

2. seqOp: Función que se aplica a cada partición del RDD de forma local.

3. combOp: Función que combina los resultados parciales de cada partición.

Ejemplo 1: Sumar valores en un RDD

from pyspark.sql import SparkSession

# Inicializar Spark
spark = SparkSession.builder.appName("EjemploAggregate").getOrCreate()
sc = spark.sparkContext

# Crear un RDD
rdd = sc.parallelize([1, 2, 3, 4, 5])

# Sumar todos los elementos usando aggregate
resultado = rdd.aggregate(0, lambda acc, x: acc + x, lambda acc1, acc2: acc1 + acc2)

print(resultado)  # Salida: 15

Explicación:

  • zeroValue = 0: Valor inicial de la suma.
  • lambda acc, x: acc + x: Suma los valores dentro de cada partición.
  • lambda acc1, acc2: acc1 + acc2: Suma los resultados de cada partición.

Ejemplo 2: Encontrar la longitud total de cadenas en un RDD

rdd = sc.parallelize(["Hola", "Spark", "Python"])

resultado = rdd.aggregate(0, lambda acc, x: acc + len(x), lambda acc1, acc2: acc1 + acc2)

print(resultado)  # Salida: 14 (4+5+6)

Ejemplo 3: Calcular promedio usando aggregate()

Podemos calcular el promedio sin usar mean(), devolviendo una tupla (suma, contador).

datos = sc.parallelize([1, 2, 3, 4, 5])

promedio = datos.aggregate(
    (0, 0),  
    lambda acc, x: (acc[0] + x, acc[1] + 1),  
    lambda acc1, acc2: (acc1[0] + acc2[0], acc1[1] + acc2[1])
)

resultado = promedio[0] / promedio[1]
print(resultado)  # Salida: 3.0

Explicación:

  • zeroValue = (0, 0): Inicializa (suma, contador).
  • seqOp: Suma valores y cuenta elementos en cada partición.
  • combOp: Suma resultados de las particiones.
Etiquetas:
python
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer