Diferentes formas de crear un RDD

En este artículo veremos las diferentes formas de crear un RDD en Apache Spark utilizando Scala.

Resilient Distributed Dataset (RDD) es la abstracción principal de Spark. Los RDD son una colección de elementos particionados a través de los nodos del clúster los cuales pueden ser operados en paralelo.

Existen tres características vitales asociadas con un RDD:

  • Dependencias
  • Particiones
  • Función de cálculo: Partición => Iterador [T]

Dependencias: Es una lista que le indica a Spark cómo se construye un RDD con sus entradas. Cuando sea necesario reproducir resultados, Spark puede recrear un RDD a partir de estas dependencias y replicar operaciones en él. Esta característica otorga resiliencia (resiliency) a los RDD.

Particiones: Brindan a Spark la capacidad de dividir el trabajo para paralelizar el cálculo en particiones entre ejecutores.

Función de cálculo: Esta produce un Iterador [T] para los datos que se almacenarán en el RDD.

Diferentes formas de crear un RDD

Lo primero que vamos a ver es cómo crear un RDD vacío en Apache Spark. Para ello será necesario tener una sesión de Spark creada y luego utilizaremos la función emptyRDD que está disponible desde sparkContext.

				
					// Crear un RDD vacío

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder.appName("josemtech").getOrCreate()

val sc = spark.sparkContext

val rddVacio = sc.emptyRDD
				
			

La segunda alternativa que veremos para crear un RDD es de hecho una de las más utilizadas. Esta opción hace uso de la función parallelize.

				
					// Crear un RDD con parallelize

val rddVacio1 = sc.parallelize(Seq(), 3)
				
			

Esta opción que acabamos de ver creará también un RDD vacío. Sin embargo, en este caso le estamos informando a Spark que deseamos que nuestro RDD tenga exactamente tres particiones. Si por el contrario deseamos crear un RDD que contenga información podemos realizarlo de la siguiente manera.

				
					val rdd = sc.parallelize(Seq(1,2,3,4,5))
				
			

Crear un RDD desde un archivo de texto

Para crear un RDD desde un archivo de texto vamos a necesitar tener un archivo de texto que contenga información y luego hacer uso de la función textFile que está disponible desde sparkContext.

				
					val rddTexto = sc.textFile("/direccion/del/archivo/texto.txt")
				
			

En este caso que acabamos de mostrar estamos creando el RDD rddTexto a partir del archivo de texto texto.txt. 

Crear un RDD a partir de una DataFrame

A continuación veremos cómo crear un RDD a partir de un DataFrame. Lo primero que vamos a necesitar es un DataFrame el cual luego lo emplearemos para crear nuestro RDD.

				
					import spark.implicits._

val df = Seq((1, "Juan"), (2, "Rosa")).toDF("id", "nombre")

val rddDataFrame = df.rdd

				
			

En este punto habremos creado la variable rddDataFrame la cual contiene un RDD que ha sido creado a partir de un DataFrame.

Operaciones sencillas con RDD

Hasta aquí ya sabemos cómo crear un RDD de diversas formas. Lo siguiente sería saber cómo poder realizar operaciones con esos RDD para poder transformarlos en dependencia de nuestras necesidades.

Lo primero que aprenderemos a realizar es, por ejemplo, cómo sumarle uno a un RDD numérico que tengamos previamente creado. Para este caso vamos a utilizar la variable rdd que previamente hemos creado la cual contiene un RDD con los números del 1 hasta el 5.

				
					val rddSumaUno = rdd.map(x => x + 1)
				
			

Como resultado estaremos obteniendo en la variable rddSumaUno un RDD que ahora contiene los números del 2 al 6.

Para la siguiente operación vamos a crear un RDD con nombres de colores como se muestra a continuación.

				
					val rddColores = spark.sparkContext.parallelize(Seq("azul", "negro", "verde", "amarillo"))
				
			

Supongamos que nos piden obtener a partir del RDD creado la lista de los colores que comienzan con la letra a. Para este caso lo que necesitamos hacer es un filtrado que solo nos devuelva los colores azul y amarillo. Para lograr este requerimiento vamos a usar la transformación map.

				
					val rddInicianA = rddColores.filter(_.startsWith("a"))
				
			

Si necesitas aprender más  sobre los RDD en Apache Spark y dar un paso más allá y aprender a trabajar también con los DataFrames, te invito a que le eches un vistazo a mi curso Spark y Scala en Databricks: Big Data e ingeniería de datos. En este curso te enseñaremos a trabajar con RDDs y DataFrames desde niveles básicos hasta avanzados, podrás conocer como funcionas las diferentes transformaciones y acciones que podemos realizar sobre ellos y además conocerás aspectos avanzados que te ayudarán a optimizar tus aplicaciones de Apache Spark

Spark y Scala en Databricks: Big Data e ingeniería de datos

Entradas creadas 26

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Comienza escribiendo tu búsqueda y pulsa enter para buscar. Presiona ESC para cancelar.

Volver arriba