Apache Spark: Introducción a Spark Sql

Todo el mundo oye hablar de Big Data, de cómo el procesamiento masivo de datos puede ayudarnos a buscar soluciones a problemas que hasta ahora nos parecían demasiado volumétricos y cuyo procesamiento dependía de un tiempo del que no disponemos. Hablo del tipo de problemas a los que nos enfrentamos las compañías para ofrecer a nuestros clientes servicios como sistemas de recomendaciones, sistemas de predicción, análisis de fraude o incluso los sistemas de vídeo y audio en streaming.

Actualmente existen multitud de tecnologías que ofrecen una solución a estos problemas, entre ellas está Apache Spark que es uno de los sistemas de procesamiento más extendidos actualmente, tanto para datos estructurados como no estructurados.

¿Qué es Apache Spark?

Apache Spark es un framework de computación distribuida en cluster, basada en un sistema de operaciones (transformaciones y acciones) realizadas sobre colecciones de datos distribuidas, denominadas RDD (Resilient Distributed Dataset).

Una de las ventajas que hace a Spark un sistema eficiente y rápido para el tratamiento masivo de datos es que los RDD se almacenan en memoria, permitiendo un acceso más rápido a ellos para la realización de operaciones complejas.

Sin embargo, la razón por la que Spark se ha extendido tanto y se ha convertido en una tecnología de referencia para el procesamiento de datos, es que se trata de un proyecto Open Source en continuo desarrollo, con una enorme comunidad activa. Debido a esto, se han ido desarrollando diferentes librerías diseñadas para solucionar diferentes tipos de problemas.

Entre todos los módulos que posee Spark, en este artículo vamos a profundizar en Spark SQL.

Spark Sql

Cuando se habla de datos estructurados nos referimos a la información que suele encontrarse en la mayoría de bases de datos, información etiquetada y controlada que puede encontrarse en filas o en columnas. Spark SQL se utiliza principalmente para el tratamiento de este tipo de información y lo hace mediante DataFrames.

Los DataFrames son conjuntos de datos distribuidos y organizados por columnas que pueden ser construidos a partir de diversas fuentes de datos como Cassandra, HIVE, Elastic Search, JDBC, ficheros csv, json, avro, etc. o directamente desde un RDD ya existente. Por explicarlo de una forma más sencilla, los DataFrames son conceptualmente equivalentes a las tablas de una base de datos relacional.

La API de Spark SQL permite la conexión a las fuentes de origen, obteniendo así los datos y pasando a ser gestionados en memoria mediante Spark.

Ejemplo de construcción de un DataFrame mediante JDBC

// Crea un DataFrame a partir de una tabla llamada “clientes”
// almacenada en una base de datos MySQL
 
val url = "jdbc:mysql://ip:port/test"
val df = sqlContext
       .read
       .format("jdbc")
       .option("url", url)
       .option("dbtable", "clientes")
       .load()
 
// Muestra el esquema del DataFrame<
df.printSchema()
 
// Cuenta a los clientes por su edad
val countsByAge = df.groupBy("edad").count()
countsByAge.show()

Y entonces, ¿Qué ventajas nos ofrece tratar toda esta información con Spark?

Teniendo en cuenta que el origen de datos de una compañía puede ser diverso, manteniendo información estructurada o semi-estructurada en diferentes sistemas, una casuística habitual en la que aplicarlo podría ser la de una compañía de ventas que obtiene información de los movimientos que realizan sus clientes, almacena registros de todas sus ventas y además recibe más información de otras fuentes de datos externas, en formato json.

Con Apache Spark se podría unificar toda esta información y procesarla para obtener resultados, como por ejemplo, conocer cuales son sus clientes potenciales o qué clientes repiten su experiencia realizando otros pedidos.

Con esto, concluimos que Spark SQL nos provee de una capa de abstracción que da soporte a datos estructurados o semi-estructurados, y, que proporciona las siguientes ventajas:

  • Unificar información distribuida en diferentes entornos o sistemas de almacenamiento.

  • Explorar y analizar datos con un alto nivel de abstracción mediante lenguaje SQL, permitiendo su uso a personas no especializadas.

  • Elimina restricciones impuestas por las fuentes de datos de origen. Por ejemplo, Cassandra no permite realizar querys filtrando por campos no incluidos en la Primary Key, sin embargo, Spark SQL al mantener toda la información en memoria permite realizar consultas sobre cualquier tipo de dato.

  • Operaciones optimizadas. La API ofrece multitud de métodos de transformación que abstraen de la complejidad a bajo nivel, garantizando un proceso óptimo.

  • Trabajar con una plataforma de código abierto en continuo desarrollo, con una gran comunidad activa.

Daniel Graña

"La fundación" de Isaac Asimov, "El juego de Ender", "Veinte mil leguas de viaje submarino"... son algunos de los libros que me leía mi padre cuando era pequeño. Él inicio mi búsqueda de un mundo nuevo de creatividad e innovación donde la ficción puede convertirse en realidad. Actualmente, mi búsqueda me ha llevado a convertirme en Developer en Future Space.