Creación y Transformaciones de RDDs en Databricks

Clase 9 de 25Curso de Databricks: Arquitectura Delta Lake

Resumen

¿Cómo crear RDDs en Databricks?

Exploraremos cómo generar RDDs (Resilient Distributed Datasets) usando la plataforma Databricks para realizar análisis de datos distribuidos de manera eficiente. Los RDDs son la unidad fundamental dentro de Apache Spark, proporcionando tolerancia a fallos y eficiencia en la ejecución de operaciones paralelas.

¿Cómo importar y configurar un notebook en Databricks?

Para empezar, asegúrate de que tu clúster esté activo en Databricks, seleccionando el clúster de Platzi o uno que ya tengas configurado. Luego, dirígete a la sección de Workspace en Databricks, donde podrás importar un notebook desde tu sistema de ficheros o una URL, como la de un repositorio de GitHub.

  1. Importación de un archivo:
    • Dirígete a File y usa la función de arrastrar y soltar para cargar archivos compatibles como .dbc, .scala, .py, .sql, R, .ipynb, etc.
  2. Importación desde una URL:
    • Si tienes un notebook alojado en un repositorio en línea, puedes importar el notebook directamente mediante su URL.

El notebook de ejemplo, "¿Qué son los RDDs Apache Spark Parte 2?", estará disponible en los recursos del curso. Una vez importado, atacha tu clúster para comenzar a ejecutar el código.

¿Qué son Spark Session y Spark Context?

Antes de proceder a crear RDDs, comprendamos dos conceptos esenciales en Spark:

  • Spark Session: Es el punto de acceso principal para interactuar con Spark, y facilita la ejecución de comandos.
  • Spark Context: Permite la comunicación directa con el clúster de Spark, administrando las ejecuciones.

En Databricks, estos componentes ya están configurados, eliminando la necesidad de inicializar manualmente Spark Session o Spark Context, optimizando el entorno para el usuario.

¿Cómo crear un RDD en Spark?

Crear un RDD puede hacerse de diferentes maneras dependiendo de tus necesidades. A continuación, exploraremos cómo crear un RDD vacío y un RDD con particiones:

# Crear un RDD vacío
rdd_vacio = sc.emptyRDD()

# Crear un RDD con tres particiones
rdd_con_particiones = sc.parallelize([1, 2, 3, 4, 5], numSlices=3)

# Recoger (collect) y ver las particiones
print(rdd_con_particiones.collect())  # Salida: [1, 2, 3, 4, 5]
print(rdd_con_particiones.getNumPartitions())  # Salida: 3

En el ejemplo, parallelize es la función que distribuye los datos a través de particiones, permitiendo su ejecución paralela.

¿Qué son las transformaciones y cómo aplicarlas a los RDDs?

Las transformaciones en Spark son operaciones que se aplican a RDDs para generar nuevos RDDs. Estas son perezosas, lo que significa que no se ejecutan inmediatamente hasta que se realiza una acción que las desencadena.

  1. Map y Filter:

    • Map: Aplica una función a cada elemento del RDD.

      rdd_mapped = rdd_con_particiones.map(lambda x: x * 2)
      print(rdd_mapped.collect())  # Salida: [2, 4, 6, 8, 10]
      
    • Filter: Filtra los elementos que cumplen con una condición específica.

      rdd_filtrado = rdd_con_particiones.filter(lambda x: x % 2 == 0)
      print(rdd_filtrado.collect())  # Salida: [2, 4]
      
  2. Distinct y ReduceByKey:

    • Distinct: Devuelve los elementos únicos del RDD.

      rdd_unico = rdd_con_particiones.distinct()
      print(rdd_unico.collect())  # Salida: [1, 2, 3, 4, 5]
      
    • ReduceByKey: Aplica una función de reducción a pares clave-valor.

      rdd_pairs = sc.parallelize([('A', 3), ('B', 2), ('A', 2), ('B', 4)])
      rdd_reducido = rdd_pairs.reduceByKey(lambda a, b: a + b)
      print(rdd_reducido.collect())  # Salida: [('A', 5), ('B', 6)]
      
  3. SortByKey:

    • Organiza los elementos de un RDD basado en sus claves.
    rdd_ordenado = rdd_pairs.sortByKey(ascending=False)
    print(rdd_ordenado.collect())  # Salida: [('B', 6), ('A', 5)]
    

¿Qué debemos tener en cuenta al trabajar con transformaciones?

Las transformaciones como map, filter, distinct, entre otras, son fundamentales para modificar y estructurar los datos en un RDD. Es importante recordar que todas estas operaciones generan nuevos RDDs, ya que los RDDs originales son inmutables.

En resumen, aprender a manejar Databricks y Apache Spark con eficiencia nos permite aprovechar al máximo sus capacidades para análisis de datos grandes y complejos de manera distribuida y tolerante a fallos. ¡Continúa experimentando y expandiendo tus habilidades con la práctica!