Curso de Fundamentos de Spark para Big Data

Curso de Fundamentos de Spark para Big Data

Óscar Gutiérrez Castillo

Óscar Gutiérrez Castillo

RDD y DataFrames

7/25

Lectura

Todas las aplicaciones en Spark poseen un manejador central de programa (Driver) y varios ejecutores que se crean a lo largo del clúster, estas son las computadoras que realizarán las tareas en paralelo y finalmente devolverán los valores al driver, la aplicación central.

Para fines de este curso, debido a que se usa un modelo stand-alone, solo se contará con un driver y un ejecutor, ambos alojados en la misma computadora.

RDD

Para poder realizar estas tareas, Spark posee desde su versión 1.0 los RDD (Resilient Distributed Dataset), los cuales son tolerantes a fallos y pueden ser distribuidos a lo largo de los nodos del clúster.

Los RDD pueden ser creados al cargar datos de manera distribuida, como es desde un HDFS, Cassanda, Hbase o cualquier sistema de datos soportado por Hadoop, pero también por colecciones de datos de Scala o Python, además de poder ser leídos desde archivos en el sistema local.

En visión general, un RDD puede ser visto como un set de datos los cuales soportan solo dos tipos de operaciones: transformaciones y acciones.

Las transformaciones permiten crear un nuevo RDD a partir de uno previamente existente, mientras que las acciones retornan un valor al driver de la aplicación. El núcleo de operación del paradigma de Spark es la ejecución perezosa (Lazy), es decir que las transformaciones solo serán calculadas posterior a una llamada de acción.

Además, los RDD poseen una familiaridad con el paradigma orientado a objetos, lo cual permite que podamos realizar operaciones de bajo nivel a modo. Map, filter y reduce son tres de las operaciones más comunes.

Una de las grandes ventajas que ofrecen los RDD es la compilación segura; por su particularidad de ejecución perezosa, se calcula si se generará un error o no antes de ejecutarse, lo cual permite identificar problemas antes de lanzar la aplicación. El pero que podemos encontrar con los RDD es que no son correctamente tratados por el Garbage collector y cuando las lógicas de operación se hacen complejas, su uso puede resultar poco práctico, aquí entran los DataFrames.

DataFrames

Esos componentes fueron agregados en la versión 1.3 de Spark y pueden ser invocados con el contexto espacial de Spark SQL. Como indica su nombre, es un módulo especialmente desarrollado para ser ejecutado con instrucciones parecidas al SQL estándar.

De la misma forma, como los RDD, estos pueden ser creados a partir de archivos, tablas tipo Hive, bases de datos externas y RDD o DataFrames existentes.

El primer detalle que salta cuando creamos un DataFrame es que poseen columnas nombradas, lo que a nivel conceptual es como trabajar con un DataFrame de Pandas. Con la excepción que a nivel interno Spark trabaja con Scala, lo cual le asigna a cada columna el tipo de dato Row, un tipo especial de objeto sin tipo definido.

Pero no es todo, los DataFrames implementan un sistema llamado Catalyst, el cual es un motor de optimización de planes de ejecución, parecido al que usan las bases de datos, pero diseñado para la cantidad de datos propia de Spark, aunado a eso, se tiene implementado un optimizador de memoria y consumo de CPU llamado Tungsten, el cual determina cómo se convertirán los planes lógicos creados por Catalyst a un plan físico.

Ahora que conoces más sobre RDD y DataFrames es momento de comenzar a utilizarlos en operaciones. Acompáñame a la siguiente clase, empezaremos por ejecutar transformaciones y acciones con los RDD.

Aportes 6

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

con humildad les comparto mis apuntes sobre el curso, es buenísimo, y si le hacen fork dejen su Estrellita en el repo, devuelvan algo a la comunidad de platzi, y nunca paren de aprender.

https://github.com/rb-one/Cuso_Introductorio_de_Spark/blob/master/Notes/notes.md

¿Qué diferencia un dataset de un dataframe?
Hemos visto ya que tanto un dataset como un dataframe son conjuntos de datos organizados en estructuras rectangulares en forma de tabla o matriz, que almacenan sus datos en filas y columnas y con unas variables que corresponden a unos objetos.

Lo que diferencia a un dataframe de un dataset es que un dataframe es un dataset que a la vez está organizado en columnas, de modo que en el dataframe tendremos los datos estructurados y cada columna con su nombre correspondiente.

Las matrices almacenan un único tipo de datos pero en las matrices del dataframe se aceptan valores alfanuméricos por lo que otra característica que les diferencia es que el dataframe puede contener distintos tipos de datos.

Esta organización nos facilitará y hará más sencillo consultar, modificar o transformar el conjunto de datos contenidos en la hoja de datos.

Si fueras el programador para el desarrollo de una solución Big Data que se desarrollará mediante lenguaje de programación R ¿qué estructura de datos escogerías: datasets o dataframes

great! un poco confuso jaja

Una de las cosas que me sorprende mucho es de lo que he entendido hasta ahorita es que los RDD (DataFrames y todos los que se derivan de RDD también), están pensados para soportar grandes volúmenes de datos de manera distribuida (lógicamente el conjunto de datos puede ser uno sólo, pero físicamente dicho conjunto puede estar dividido en n servidores). Me imagino la siguiente situación: que sería procesar un conjunto de datos de unos 50 petas, podríamos intentar procesar dicha data con python puro o con Pandas y sus dataFrames pero creo que la memoria se nos quedaría corta, al usar Spark podemos construir un programa que trate dicho conjunto de datos de manera simple y por detrás spark gestiona cómo distribuir semejante cantidad de datos.
De momento es lo que he entendido. Sigamos.

📌 Resumen
Todas las aplicaciones en Spark poseen:

  • Un manejador central de programa (Driver) .
  • Varios ejecutores que se crean a lo largo del clúster.
  • Los ejecutores son las computadoras que realizan las tareas en paralelo y finalmente devuelven los valores al driver, la aplicación central.

En visión general, un RDD puede ser visto como un set de datos los cuales soportan solo dos tipos de operaciones: transformaciones y acciones:

  • Las transformaciones permiten crear un nuevo RDD a partir de uno previamente existente,
  • Mientras que las acciones retornan un valor al driver de la aplicación.

El núcleo de operación del paradigma de Spark es la ejecución perezosa (Lazy), es decir que las transformaciones solo serán calculadas posterior a una llamada de acción.

El pero que podemos encontrar con los RDD es que no son correctamente tratados por el Garbage collector y cuando las lógicas de operación se hacen complejas, su uso puede resultar poco práctico, aquí entran los DataFrames.

Los DataFrames (al igual que los RDD) pueden ser creados a partir de archivos, tablas tipo Hive, bases de datos externas y RDD o DataFrames existentes. El primer detalle que salta cuando creamos un DataFrame es que poseen columnas nombradas, lo que a nivel conceptual es como trabajar con un DataFrame de Pandas, pero con todos los beneficios y la optimización que le otorga los sistemas Catalyst y Tungsten.