Introducción al conjunto de datos de Spark

El conjunto de datos es una estructura de datos en Spark SQL que proporciona seguridad de tipo de tiempo de compilación, la interfaz orientada a objetos, así como la optimización de Spark SQL.

Conceptualmente, es una estructura tabular en memoria que tiene filas y columnas que se distribuye a través de múltiples nodos como Dataframe.

Es una extensión del Dataframe. La principal diferencia entre el conjunto de datos y el marco de datos es que los conjuntos de datos están fuertemente tipados.

(Conjunto de datos) = (Dataframe + seguridad de tipo de tiempo de compilación)

El conjunto de datos se lanzó en Spark 1.6 como una API experimental. Tanto Dataframe como Dataset están unificados en la versión Spark 2.0 y Dataframe se convierte en un alias para Dataset (Row).

Marco de datos = conjunto de datos (fila)

¿Por qué necesitamos Spark Dataset?

Para tener una comprensión clara de Dataset, debemos comenzar con un poco de historia de chispa y su evolución.

RDD es el núcleo de Spark. Inspirado por SQL y para facilitar las cosas, Dataframe se creó en la parte superior de RDD. Dataframe es equivalente a una tabla en una base de datos relacional o un DataFrame en Python.

RDD proporciona seguridad de tipo de tiempo de compilación, pero no existe una optimización automática en RDD.

Dataframe proporciona optimización automática pero carece de seguridad de tipo de tiempo de compilación.

El conjunto de datos se agrega como una extensión del marco de datos. El conjunto de datos combina las características tanto de RDD (es decir, seguridad de tipo de tiempo de compilación) como de Dataframe (es decir, optimización automática de Spark SQL).

(RDD (Spark 1.0)) -> (Dataframe (Spark1.3)) -> (Conjunto de datos (Spark1.6))

Como Dataset tiene seguridad en tiempo de compilación, por lo tanto, solo se admite en un lenguaje compilado (Java y Scala) pero no en un lenguaje interpretado (R y Python). Pero Spark Dataframe API está disponible en los cuatro idiomas (Java, Scala, Python y R) compatibles con Spark.

Idioma soportado por SparkAPI de marco de datosAPI de conjunto de datos
Lenguaje compilado (Java y Scala)SISI
Lenguaje Interpretado (R & Python)SINO

¿Cómo crear un conjunto de datos de Spark?

Hay varias formas de crear un conjunto de datos basado en el caso de uso

1. Primero crea SparkSession

SparkSession es un único punto de entrada a una aplicación de spark que permite interactuar con la funcionalidad subyacente de Spark y programar Spark con DataFrame y Dataset API.

val spark = SparkSession
.builder()
.appName("SparkDatasetExample")
.enableHiveSupport()
.getOrCreate()

  • Para crear un conjunto de datos utilizando una estructura de datos básica como Rango, Secuencia, Lista, etc.

Usando Rango

Usando secuencia

Usando la lista

  • Para crear un conjunto de datos utilizando la secuencia de clases de casos llamando al método .toDS ():

  • Para crear un conjunto de datos desde RDD usando .toDS ():

  • Para crear el conjunto de datos a partir de Dataframe utilizando Case Class:

  • Para crear el conjunto de datos desde el Marco de datos usando Tuplas:

2. Operaciones en el conjunto de datos de Spark

  1. Ejemplo de conteo de palabras

  1. Convertir Spark Dataset a Dataframe

También podemos convertir Spark Dataset a Datafame y utilizar las API de Dataframe de la siguiente manera:

Características del conjunto de datos de Spark

  1. Tipo de seguridad

El conjunto de datos proporciona seguridad de tipo de tiempo de compilación. Significa que la sintaxis, así como los errores de análisis de la aplicación, se verificarán en tiempo de compilación antes de que se ejecute.

  1. Inmutabilidad

El conjunto de datos también es inmutable como RDD y Dataframe. Significa que no podemos cambiar el conjunto de datos creado. Cada vez que se crea un nuevo conjunto de datos cuando se aplica cualquier transformación al conjunto de datos.

  1. Esquema

El conjunto de datos es una estructura tabular en memoria que tiene filas y columnas con nombre.

  1. Rendimiento y Optimización

Al igual que Dataframe, el conjunto de datos también utiliza Catalyst Optimization para generar un plan optimizado de consulta lógica y física.

  1. Lenguaje de programación

La API del conjunto de datos solo está presente en Java y Scala, que son lenguajes compilados, pero no en Python, que es un lenguaje interpretado.

  1. Evaluación perezosa

Al igual que RDD y Dataframe, el conjunto de datos también realiza la evaluación diferida. Significa que el cálculo ocurre solo cuando se realiza una acción. Spark solo hace planes durante la fase de transformación.

  1. Serialización y Recolección de Basura

El conjunto de datos de Spark no utiliza serializadores estándar (serialización de Kryo o Java). En cambio, utiliza los codificadores rápidos en memoria de Tungsten, que comprenden la estructura interna de los datos y pueden transformar objetos de manera eficiente en almacenamiento binario interno. Utiliza la serialización de datos fuera del montón utilizando el codificador Tungsten y, por lo tanto, no hay necesidad de recolección de basura.

Conclusión

Dataset es lo mejor de RDD y Dataframe. RDD proporciona seguridad de tipo de tiempo de compilación, pero no existe una optimización automática. Dataframe proporciona optimización automática pero carece de seguridad de tipo de tiempo de compilación. El conjunto de datos proporciona tanto seguridad de tipo de tiempo de compilación como optimización automática. Por lo tanto, el conjunto de datos es la mejor opción para los desarrolladores de Spark que usan Java o Scala.

Artículos recomendados

Esta es una guía para Spark Dataset. Aquí discutimos cómo crear un conjunto de datos de Spark de múltiples maneras con ejemplos y características. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. Comandos de Spark Shell
  2. Preguntas de la entrevista de Spark
  3. Carrera en Spark
  4. Spark Streaming
  5. Diferentes operaciones relacionadas con tuplas
  6. Spark SQL Dataframe
  7. Tipos de combinaciones en Spark SQL (ejemplos)
  8. Guía de la lista de comandos de shell de Unix
  9. Los 6 componentes principales de Spark

Categoría: