Volver al curso

Data Engineering con Python: Pipelines y Big Data

leccion
7 / 12
advanced
32 horas
Big Data: Procesamiento Distribuido con Spark

PySpark: Procesamiento de Datos a Escala

Lectura
50 min~1 min lectura

Apache Spark: Cuando los Datos No Caben en una Maquina

Spark es el motor de procesamiento distribuido mas popular. Cuando tus datos superan los 10-50 GB, Spark distribuye el procesamiento entre multiples nodos, permitiendo procesar terabytes e incluso petabytes.

VolumenHerramientaLatencia
< 1 GBPandasSegundos
1-100 GBPolars / DuckDBSegundos-Minutos
100 GB - 10 TBPySparkMinutos
10 TB+Spark cluster (EMR/Dataproc)Minutos-Horas
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.window import Window

spark = SparkSession.builder \
    .appName('AnalisisVentasLATAM') \
    .config('spark.sql.adaptive.enabled', 'true') \
    .getOrCreate()

df_ventas = spark.read.parquet('s3://data-lake/raw/ventas/')
df_productos = spark.read.parquet('s3://data-lake/raw/productos/')

resultado = (
    df_ventas
    .join(df_productos, 'product_id', 'left')
    .filter(F.col('country').isin(['AR', 'MX', 'CO', 'BR', 'CL']))
    .withColumn('year_month', F.date_format('created_at', 'yyyy-MM'))
    .groupBy('year_month', 'country', 'category')
    .agg(
        F.sum('amount').alias('total_revenue'),
        F.countDistinct('user_id').alias('unique_buyers'),
        F.avg('amount').alias('avg_order_value')
    )
    .orderBy('year_month', F.desc('total_revenue'))
)

resultado.write.mode('overwrite').partitionBy('year_month') \
    .parquet('s3://data-lake/processed/revenue/')

🚀 Optimizacion Clave

El particionamiento es la optimizacion mas impactante en Spark. Particiona por la columna que mas filtras (generalmente fecha). Puede reducir tiempos de horas a segundos.

ProveedorServicioCosto Aprox
AWSEMRUSD 0.10/hora por nodo
GCPDataprocUSD 0.01/hora + compute
AzureHDInsightVariable
DatabricksDatabricksPremium sobre cloud

En la siguiente leccion veremos data lakes y la arquitectura lakehouse.