Desde los perfiles en Big Data más experimentados como los más juniors podemos encontrar un nexo común, trabajar con datasets, si te dedicas al Data Science o al Aprendizaje Automático y aún no has trabajado con esta representación de los datos, no te preocupes, pronto lo harás porque son la materia prima más predominante en cualquier proyecto de Ciencia de Datos. En el siguiente post, realizaremos una comparativa entre datasets, dataframes y RDD tanto en R como en Spark.
Qué es Dataset
Un dataset no es más que un conjunto de datos que a menudo se encuentran tabulados, su representación es similar a la de una matriz (únicamente en datos estructurados), es decir, es representado por filas y columnas, también es similar a una tabla de una base de datos (tipo relacional).
Cada fila representa un registro del dataset (pueden contener o no un identificador) y las columnas actúan como variables de un dataset que describen a ese registro, por ejemplo, en un entorno bancario tendríamos a la fila o cliente 1, y las columnas o variables que describieran información personal del cliente (Nombre, Apellidos, número de hijos, saldo actual…)
Su principal diferencia con una matriz es que una matriz es estrictamente numérica y un dataset puede contener otro tipo de información como números enteros, decimales o caracteres.
Qué es Dataframe
Si traducimos este término literalmente estaríamos hablando de una hoja o marco de datos. Es la estructura de datos más común en cuando realizamos cualquier análisis estadístico, ya que nos permite tomar muy fácilmente tomar una muestra de los datos y convertir archivos como .csv, .xml o. json entre otros como dataframe.
Principales lenguajes de programación de Dataframes
Los principales lenguajes de programación en manipulación de dataframes son Python y R, siendo los dataframes un tipo de clase especial de este último lenguaje. Por lo general, se almacenarán en memoria para ser accesibles y poder realizar operaciones sobre ellos.
Como podemos comprobar, ya podemos ver las principales diferencias entre los dataset los dataframe, los dataset pueden estar almacenados en repositorios, archivos o en disco, y los dataframe por lo general se guardan en memoria RAM, son obtenidos a través de los dataset.
Resilient Distributed Datasets (RDD)
Uno de los pilares base de Apache Spark, los Resilient Distributed Datasets (RDD), se tratan de datasets tolerantes a fallos, capaces de operar en paralelo (esta es la razón por la que son uno de los pilares base de Spark, ya que Spark, se basa principalmente en procesos paralelizados). Algunas de sus principales características son:
- Los RDD son un tipo de estructura de Spark
- No son mutables, es decir, si deseamos realizar una operación sobre un RDD, tendremos obligatoriamente que generar uno nuevo (Para evitar problemas de ineficiencia no se crean copias de los datos, si no grafos tipo DAG, que almacenan todas las funciones de edición sobre un RDD).
- Suelen crearse a través del tipo de archivos de Hadoop, archivos HDFS (aunque esto no impide que, por ejemplo, creemos un RDD a través de archivos con otra extensión como un. json o .csv, previamente subidos a HDFS)
- Son distribuidos, es decir, un RDD se encuentra ubicado en diferentes nodos de un clúster, ya que, una tarea habitual trabajando con Apache Spark, es trabajar de forma distribuida en varios cluster, por lo tanto, al encontrarse un RDD en varios cluster, si un cluster o máquina falla, aún tendremos el archivo en los otros cluster o máquinas, por lo tanto, los RDD son también tolerantes a fallos.
Principales diferencias entre un RDD y Datafranes
Una vez descritos este tipo de estructuras de datos, os ofrecemos las principales diferencias entre ambos.
- Tanto RDD como los dataframes provienen de datasets.
- Los RDD necesitan ser subidos a HDFS previamente, los dataframes pueden ser cargados en memoria directamente desde un archivo como por ejemplo un .csv
- Los RDD son un tipo de estructura de datos especial de Apache Spark, mientras que los dataframes son una clase especial de R.
- Los RDD son inmutables (su edición va generando el DAG), mientras que los dataframes admiten operaciones sobre los propios datos, es decir, podemos cambiarlos en memoria.
- Los RDD se encuentran distribuidos entre los cluster, los dataframes en un único cluster o máquina.
- Los RDD son tolerantes a fallos, los dataframes
Como se puede ver la elección de un tipo de estructura u otra depende intrínsecamente del tipo de proyecto al que nos vayamos a dedicar y la tecnología que vayamos a emplear para ello.
Juan Manuel Moreno, tutor del Master en Big Data en IMF.