Introducción

Los RDDs (Resilient Distributed Datasets) son la abstracción fundamental de datos en Apache Spark. Un RDD es una colección de elementos que se pueden distribuir a través de un clúster de máquinas y se pueden operar en paralelo. Los RDDs son inmutables y pueden ser reconstruidos en caso de fallos, lo que los hace resilientes.

Características Clave de los RDDs

  1. Inmutabilidad: Una vez creado, un RDD no puede ser modificado. Las operaciones en RDDs generan nuevos RDDs.
  2. Distribución: Los datos en un RDD están distribuidos a través de múltiples nodos en un clúster.
  3. Resiliencia: Los RDDs pueden ser reconstruidos en caso de fallos, utilizando la información de linaje (historial de operaciones).
  4. Evaluación Perezosa: Las transformaciones en RDDs son evaluadas de manera perezosa, es decir, no se ejecutan hasta que se realiza una acción.
  5. Particionamiento: Los RDDs pueden ser particionados para optimizar las operaciones de procesamiento.

Creación de RDDs

Desde una Colección en Memoria

from pyspark import SparkContext

sc = SparkContext("local", "RDD Example")
data = [1, 2, 3, 4, 5]
rdd = sc.parallelize(data)

Desde un Archivo Externo

rdd = sc.textFile("path/to/file.txt")

Transformaciones y Acciones

Transformaciones

Las transformaciones son operaciones que crean un nuevo RDD a partir de uno existente. Son evaluadas de manera perezosa.

  • map: Aplica una función a cada elemento del RDD y devuelve un nuevo RDD.
rdd = sc.parallelize([1, 2, 3, 4])
rdd2 = rdd.map(lambda x: x * 2)
print(rdd2.collect())  # [2, 4, 6, 8]
  • filter: Filtra los elementos del RDD según una función de predicado.
rdd = sc.parallelize([1, 2, 3, 4])
rdd2 = rdd.filter(lambda x: x % 2 == 0)
print(rdd2.collect())  # [2, 4]

Acciones

Las acciones son operaciones que devuelven un valor al controlador del programa o escriben datos a un sistema de almacenamiento externo.

  • collect: Devuelve todos los elementos del RDD como una lista.
rdd = sc.parallelize([1, 2, 3, 4])
print(rdd.collect())  # [1, 2, 3, 4]
  • count: Devuelve el número de elementos en el RDD.
rdd = sc.parallelize([1, 2, 3, 4])
print(rdd.count())  # 4

Ejemplo Práctico

Contar Palabras en un Archivo de Texto

rdd = sc.textFile("path/to/file.txt")
words = rdd.flatMap(lambda line: line.split(" "))
wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
print(wordCounts.collect())

Explicación del Código

  1. textFile: Carga el archivo de texto en un RDD.
  2. flatMap: Divide cada línea en palabras.
  3. map: Mapea cada palabra a un par (palabra, 1).
  4. reduceByKey: Suma los valores para cada clave (palabra).

Ejercicios Prácticos

Ejercicio 1: Filtrar Números Pares

Descripción: Dado un RDD de números, filtra los números pares.

rdd = sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
rdd_even = rdd.filter(lambda x: x % 2 == 0)
print(rdd_even.collect())  # [2, 4, 6, 8, 10]

Ejercicio 2: Contar Palabras en un Archivo

Descripción: Dado un archivo de texto, cuenta el número de ocurrencias de cada palabra.

rdd = sc.textFile("path/to/file.txt")
words = rdd.flatMap(lambda line: line.split(" "))
wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
print(wordCounts.collect())

Resumen

En esta sección, hemos aprendido sobre los RDDs, la abstracción fundamental de datos en Apache Spark. Hemos cubierto sus características clave, cómo crearlos, y las transformaciones y acciones que se pueden realizar en ellos. También hemos visto ejemplos prácticos y ejercicios para reforzar los conceptos aprendidos. En el próximo módulo, exploraremos las transformaciones y acciones en mayor detalle.

© Copyright 2024. Todos los derechos reservados