← Lumbre

Big Data y Procesamiento Distribuido · 6.º Spark: RDDs y DataFrames

Portada de Spark: RDDs y DataFrames

Spark: RDDs y DataFrames

✦ Spark heredó el paralelismo de MapReduce pero lo hizo en memoria y perezoso: no calcula hasta que necesitas un resultado, y planifica el camino · Big Data y Procesamiento Distribuido · Ingeniería de Datos · 9 minutos que valen la pena

Roadwise Consulting

Firmado y verificado · Biblioteca UNIV

Objetivo: Transformar datos distribuidos con Spark aprovechando la ejecución perezosa, distinguiendo el nivel bajo de RDD de la abstracción optimizada de DataFrame.

9 min Big Data y Procesamiento Distribuido · Ingeniería de Datos 18–30 años
Más
Spark: RDDs y DataFrames

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Big Data y Procesamiento Distribuido · 6.º semestre Cursos Explorar Mi cuenta Salir del modo estudio

Spark: RDDs y DataFrames

Spark: RDD frente a DataFrame
Vídeo en español que compara las dos abstracciones y cuándo conviene cada una.

Resilient Distributed Dataset

Un RDD es una colección de partículas repartida entre nodos, tolerante a fallos por linaje. Se transforma con map, filter y reduce, y si un nodo cae, Spark reconstruye la partición perdida repitiendo los pasos del linaje.

Pereza y planificación

Las transformaciones son perezosas: construyen un grafo de instrucciones. Las acciones, como count o collect, disparan el cálculo. Esa separación deja al planificador fusionar y reordenar etapas.

Del RDD al DataFrame

El RDD obliga a pensar en partículas y escribir la lógica de datos a mano. DataFrame añade esquema y una capa que optimiza la consulta, como un motor SQL, quitando al programador el trabajo pesado.

Catalyst

  • Un optimizador de consultas reescribe el plan lógico antes de ejecutarlo.
  • Se aprovecha el esquema para podar columnas y empujar filtros al origen.
  • Programar en DataFrame suele ser más rápido que en RDD puro por esa optimización.

Persistir en memoria

Cuando un resultado intermedio se reutiliza, conviene guardarlo en memoria o disco con persist. Es la herida que curaba Spark frente a MapReduce: evita recalcular y reescribir en cada etapa.

Cuatro cajas de contorno tenue enlazadas por flechas discontinuas forman un plano; una chispa brillante en el extremo dispara una flecha sólida hacia una tabla llena de datos, y un chip de memoria descansa debajo.
Nada se calcula hasta que una acción lo pide; entonces el plano optimizado aterriza sobre la memoria.

Shuffle aún pesa

Aunque sea rápido, el shuffle sigue siendo caro en Spark. Particionar bien y evitar reagrupaciones innecesarias marca la diferencia entre un job ágil y uno que se arrastra por mover datos entre nodos.

Cuándo cuál

DataFrame para casi todo: datos tabulares, optimización y claridad. RDD cuando hace falta control fino sobre partículas o estructuras no tabulares que el optimizador no entendería.

Errores frecuentes

  • Encadenar acciones por error y provocar varios cálculos completos del mismo plano.
  • Programar en RDD todo lo que es tabular y perder la optimización de Catalyst.
  • Reparticionar sin necesidad y pagar shuffles que el job no pedía.

Ejemplo resuelto: acelerar un job que repite el mismo volumen

Un entrenamiento lee cada vuelta los mismos cien gigabytes y tarda una hora por iteración. La corrección:

  1. Medir primero dónde se va el tiempo, mirando el plan y las etapas con shuffle.
  2. Persistir en memoria el conjunto base que todas las iteraciones reutilizan.
  3. Preferir DataFrame para que el optimizador pode columnas y empuje filtros al origen.
  4. Reparticionar solo por la clave con la que se agrega, evitando reagrupaciones extra.
  5. Comprobar con el historial de etapas que la segunda iteración ya no relee el disco.

¿Para qué sirve en la realidad?

Todo trabajo iterativo, del machine learning a los gráficos de recomendación, relee el mismo dato vuelta y vuelta. Entender la pereza y la persistencia decide si el experimento tarda minutos u horas.

Encadenas varias transformaciones en un DataFrame y no ves que se calcule nada hasta llamar a una acción. El comportamiento se debe a que Spark es:

Un DataFrame suele rendir mejor que un RDD equivalente porque Spark puede optimizar la consulta.

Spark

Colección distribuida tolerante a fallos de Spark
rdd
Reconstruir una partición perdida usando los pasos seguidos es...
linaje
Calcular solo al pedir el resultado es ejecución...
perezosa
Optimizador de consultas de Spark se llama...
catalyst
Guardar un intermedio para reusarlo es...
persistir

Toca una tarjeta para ver la respuesta.

Ordena el ciclo de vida de un job Spark perezoso:

Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.

Une cada pieza de Spark con su papel.

      No se calcula hasta que se pide

      • Spark
        • RDD
          • control fino
            • linaje reconstruye
              • optimización a mano
              • DataFrame
                • esquema visible
                  • Catalyst poda y empuja
                  • Pereza
                    • planos sin calcular
                      • la acción dispara
                      • Memoria
                        • persist evita recalcular
                          • shuffle sigue caro

                        Tu job iterativo reprocesa cada vuelta el mismo gran volumen. ¿Dónde aplicarías persist y por qué no basta con confiar en la pereza? Razona por reuso y memoria frente a recalculo.

                        Tu texto se guarda sólo en este dispositivo.

                        Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.
                        Más sobre esta lección
                        Explora temas relacionados

                        Conceptos

                        Comentarios

                        Inicia sesión para comentar.

                        Todavía no hay comentarios. Sé la primera persona en opinar.