Spark

Contexto captura

Fecha: 2026-09-10 Origen: = this.origen Tipo: = this.tipo-captura


📝 Captura principal

Lo más importante

Apache Spark es un motor para procesar grandes volúmenes de datos de forma distribuida. PySpark es su API para trabajar con Spark desde Python.

🎯 Detalles / Contenido

Spark divide los datos y el trabajo entre varias particiones que pueden procesarse en paralelo. Una aplicación Spark tiene un proceso driver, que coordina el trabajo, y procesos executor, que ejecutan las tareas sobre los datos.

En PySpark, la abstracción principal para trabajar con datos estructurados es el DataFrame. Normalmente se crea mediante una SparkSession y se transforma usando operaciones como select, filter, withColumn y `groupB flowchart TD A[Aplicación Spark] ⇒ B[Driver]

B -->|Coordina el trabajo| C[Planificación de tareas]
C --> D[División de datos en particiones]

D --> P1[Partición 1]
D --> P2[Partición 2]
D --> P3[Partición 3]
D --> P4[Partición N]

P1 --> E1[Executor 1]
P2 --> E2[Executor 2]
P3 --> E3[Executor 3]
P4 --> E4[Executor N]

E1 --> R[Procesamiento paralelo]
E2 --> R
E3 --> R
E4 --> R

Spark distingue entre:

  • Transformaciones: describen un nuevo conjunto de datos, pero no ejecutan el trabajo inmediatamente.
  • Acciones: solicitan un resultado y desencadenan la ejecución, por ejemplo show(), count() o write.
  • Lazy evaluation: Spark espera hasta una acción para construir y optimizar el plan de ejecución.
  • Narrow transformation: cada partición de salida depende de pocas particiones de entrada, como filter.
  • Wide transformation: puede necesitar redistribuir datos entre particiones, como groupBy o join; esta redistribución se denomina shuffle.

repartition() redistribuye los datos y puede provocar un shuffle. coalesce() suele utilizarse para reducir particiones evitando una redistribución completa.

from pyspark.sql import SparkSession
from pyspark.sql.functions import avg, col
 
spark = SparkSession.builder.appName("Ventas").getOrCreate()
 
ventas = spark.read.option("header", True).option("inferSchema", True).csv("ventas.csv")
resultado = (
    ventas.filter(col("cantidad") > 10)
    .groupBy("producto")
    .agg(avg("venta").alias("venta_media"))
)
 
resultado.show()

En este ejemplo, filter, groupBy y agg son transformaciones. show() es la acción que inicia la ejecución.

🔑 Keywords / Conceptos clave

Apache Spark, PySpark, DataFrame, driver, executor, partición, transformación, acción, lazy evaluation, shuffle

Para RAG

Spark es el motor distribuido; PySpark es la API de Python. El flujo habitual es crear una SparkSession, leer datos, aplicar transformaciones y ejecutar una acción.

🎴 Flashcards

¿Qué es PySpark?::La API de Python para trabajar con Apache Spark y procesar datos de forma distribuida. card

¿Cuál es la diferencia entre una transformación y una acción?::Una transformación describe una operación que se ejecutará después; una acción solicita un resultado y desencadena la ejecución. card

¿Qué es un shuffle?::La redistribución de datos entre particiones, normalmente provocada por operaciones como groupBy o join. card


❓ Preguntas / Dudas pendientes

  • ¿Qué diferencia hay entre el driver y los executors?
  • ¿Cómo se visualiza el plan de ejecución con explain()?

🧩 Conexiones potenciales

✅ Checklist procesamiento

  • Revisar y expandir contenido
  • Crear flashcards si es necesario
  • Hacer ejercicios relacionados
  • Conectar con otras notas
  • Actualizar nivel de comprensión

💭 Notas adicionales / Ideas rápidas

Esta nota resume Spark. Los conceptos concretos de PySpark se desarrollarán en notas atómicas dentro de la carpeta PySpark.

Tags: big-data spark pyspark captura-rapida


🚧 Plan de Mejora / Tareas Pendientes

Define las tareas que te ayudarán a subir tu nivel-comprension en la próxima revisión. Usa los tags: #mejora-concepto, #mejora-practica, #mejora-analogia.

🧪 Aplicación

  • Explicarlo sin consultar la nota
  • Resolver un caso nuevo o escribir un ejemplo
  • Compararlo con una alternativa
  • Usarlo en un proyecto

🔗 Conexiones explicadas

  • — Se relaciona porque…