Spark SQL Dataframe

Un marco de datos similar a RDD es una abstracción proporcionada para datos estructurados en la biblioteca Spark SQL. Es una colección distribuida de datos que puede considerarse una tabla en una base de datos relacional con un esquema adjunto. También se puede definir como la colección de columnas con nombre. Spark SQL es una de las bibliotecas disponibles en la pila de Spark que contiene información sobre la estructura y el cálculo que se realiza en los datos. Esta información adicional se utiliza para realizar optimizaciones. Un marco de datos incorpora los beneficios de RDD junto con técnicas de optimización y esta API está disponible en Python, R, Scala y Java.

Las diferentes fuentes que generan un marco de datos son:

  • RDD existente
  • Archivos de datos estructurados y bases de datos.
  • Mesas de colmena

Necesidad de marco de datos

La comunidad spark siempre ha intentado aportar estructura a los datos, donde los marcos de datos SQL de spark son los pasos dados en esa dirección. La API inicial de spark, RDD es para datos no estructurados donde los cálculos y los datos son opacos. Por lo tanto, se requería crear una API que pudiera proporcionar beneficios adicionales de optimización. A continuación se presentan los pocos requisitos que formaron la base del marco de datos.

  • Proceso estructurado y semi-datos
  • Múltiples fuentes de datos
  • Integración con múltiples lenguajes de programación.
  • El número de operaciones que se pueden realizar en los datos, como seleccionar y filtrar.

¿Cómo crear Spark SQL Dataframe?

Antes de comprender las formas de crear un marco de datos, es importante comprender otro concepto mediante el cual las aplicaciones de chispa crean un marco de datos de diferentes fuentes. Este concepto se conoce como sparksession y es el punto de entrada para toda la funcionalidad de chispa. Anteriormente teníamos que crear sparkConf, sparkContext o sqlContext individualmente pero con sparksession, todos se encapsulan en una sesión donde spark actúa como un objeto de sparksession.

import org.apache.spark.sql.SparkSession
val spark = SparkSession
.builder()
.appName("SampleWork")
.config("config.option", "value")
.getOrCreate()

Formas de crear un marco de datos

  1. De RDD existente

Hay dos formas en que se puede crear un Dataframe a través de RDD. Una forma es usar la reflexión que infiere automáticamente el esquema de los datos y el otro enfoque es crear un esquema mediante programación y luego aplicarlo al RDD.

  • Inferiendo el esquema

Una manera fácil de convertir un RDD a Dataframe es cuando contiene clases de casos debido a la interfaz SQL de Spark. Los argumentos pasados ​​a las clases de caso se obtienen mediante la reflexión y se convierte en el nombre de las columnas de la tabla. Las secuencias y matrices también se pueden definir en clases de caso. El RDD que se creará usando la clase de caso se puede convertir implícitamente a Dataframe usando el método toDF ().

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
case class Transport(AutoName: String, year: Int)
val Vehicle = sc.textFile("//path//").map(_.split(", ")).map(p => Transport(p(0), p(1)).toDF()

Se crea un Vehículo de trama de datos y se puede registrar como una tabla en la que se pueden ejecutar sentencias sql.

  • Especificando programáticamente el esquema

Puede haber casos en los que no conocemos el esquema de antemano o escenarios en los que las clases de casos no pueden ocupar más de 22 campos. En tales condiciones, usamos el enfoque de creación programática del esquema. En primer lugar, se crea un RDD de filas a partir del RDD original, es decir, la conversión del objeto rdd de rdd (t) a rdd (fila). Luego, cree un esquema utilizando los objetos StructType (Tabla) y StructField (Campo). Este esquema se aplica al RDD de Filas usando el método createDataFrame, que se asemeja a la estructura de rdd (fila) creada anteriormente.

val Vehicle = sc.textFile("//path")
import org.apache.spark.sql._
val schema = StructType(Array(StructField("AutoName", StringType, true), StructField("Year", IntegerType, true)))
scala> val rowRDD = vehicle.map(_.split(", ")).map(p => org.apache.spark.sql.Row(p(0), p(1).toInt))
val vehicleSchemaRDD = sqlContext.applySchema(rowRDD, schema)

  1. A través de fuentes de datos

Spark permite la creación de marcos de datos a través de múltiples fuentes como colmena, json, parquet, csv y archivos de texto que también se pueden usar para crear marcos de datos.

Val file=sqlContext.read.json(“path to the json file”)
Val file=sqlContext.read.csv(“path to the json file”)
Val file=sqlContext.read.text(“path to the json file”)
val hiveData = new org.apache.spark.sql.hive.HiveContext(sc)
val hiveDF = hiveData.sql(“select * from tablename”)

Operaciones de marco de datos

Como los datos se almacenan en formato tabular junto con el esquema, hay una serie de operaciones que se pueden realizar en los marcos de datos. Permite múltiples operaciones que se pueden realizar en datos en marcos de datos.

Considerar archivo es un marco de datos que se ha creado a partir de un archivo csv con dos columnas: FullName y AgePerPA

  1. printSchema () - Para ver la estructura del esquema

file.printSchema()
// |-- AgePerPA: long (nullable = true)
// |-- FullName: string (nullable = true)

  1. select- Similar a la instrucción select en SQL, muestra los datos como se menciona en la instrucción select.

file.select("FullName").show()
// +-------+
// | name|
// +-------+
// |Sam|
// |Jodi|
// | Bala|
// +-------+

  1. Filtro: para ver los datos filtrados del marco de datos. La condición mencionada en el comando

file.filter($"AgePerPA" > 18).show()

  1. GroupBy- Agrupar por los valores

file.groupBy("AgePerPA").count().show()

  1. show () - para mostrar el contenido del marco de datos

file.show()

Limitaciones

Aunque con los marcos de datos puede detectar el error de sintaxis sql en tiempo de compilación, no es capaz de manejar ningún error relacionado con el análisis hasta el tiempo de ejecución. Por ejemplo, si se hace referencia a un nombre de columna no existente en el código, no se notará hasta el tiempo de ejecución. Esto llevaría a perder el tiempo del desarrollador y el costo del proyecto.

Conclusión - Spark SQL Dataframe

Este artículo ofrece una imagen general (necesidad, creación, limitaciones) sobre la API de trama de datos de Spark SQL. Debido a la popularidad de las API de marcos de datos, Spark SQL sigue siendo una de las bibliotecas más utilizadas. Al igual que un RDD, proporciona características como tolerancia a fallas, evaluación diferida, procesamiento en memoria junto con algunos beneficios adicionales. Se puede definir como datos distribuidos a través del clúster en forma de tabla. Por lo tanto, un marco de datos tendrá un esquema asociado y se puede crear a través de múltiples fuentes a través del objeto de sesión de chispa.

Artículos recomendados

Esta es una guía para Spark SQL Dataframe. Aquí discutimos las formas de crear un marco de datos con las operaciones y limitaciones del marco de datos. También puede consultar el siguiente artículo para obtener más información:

  1. Comandos de Spark Shell
  2. Cursores en SQL
  3. Restricciones SQL
  4. Base de datos en SQL
  5. Tipos de combinaciones en Spark SQL (ejemplos)
  6. Guía de la lista de comandos de shell de Unix

Categoría: