Está en la página 1de 68

We make

it happen

Apache Spark
Spark SQL

eae.es
Spark SQL

Índice
01. Introducción
02. Conceptos básicos de Spark SQL
03. Carga de datos en Data Frames
04. Principales funciones Data Frames
05. Persistencia de Data Frames
06. Funciones avanzadas y UDF
07. Técnicas de Optimización
08. Modo SQL e integración con Apache Hive
09. Casos de uso
2
Spark SQL

1. Introducción

eae.es
3
Spark SQL

1. Introducción

• Spark SQL es un módulo de Spark para el procesamiento de datos


estructurados y semi estructurados
• Permite tanto usar lenguaje SQL como funciones de la API SQL.
• La sintaxis es más sencilla que la de los RDD.
• Muchos profesionales conocen ya el lenguaje SQL (es un estándar).
• En lugar de RDDs, la estructura básica es el Data Frame (DF)
• Más óptima que los RDD para procesar datos estructurados.
• Puede funcionar como una base de datos en memoria (J/ODBC).

4
Spark SQL
1. Introducción

Spark SQL es un módulo de Spark para el


procesamiento de datos estructurados.

Spark Spark
Spark Sql Graphx
Streaming Mlib

SPARK CORE

5
Spark SQL

1. Introducción

• Es posible usarlos con el resto de librerías de Spark


• Streaming.
• Machine Learning.
• Ejemplo de uso de Spark SQL
1. Importar datos de archivos Parquet o tablas de Hive.
2. Transformar esos datos y los de otros RDD existentes.
3. Almacenar los dato del DF (o RDD) en tablas de Hive o archivos Parquet.

6
Spark SQL

2. Conceptos básicos de Spark SQL

eae.es
7
Spark SQL

2. Conceptos básicos de Spark

Arquitectura
• SparkSession (incluye un SparkContext)
• Estructuras de datos
• Data Frames y Data Sets
• Almacenamiento columnar y distribuido
• Optimizador de consultas (Catalyst) y de generación de código
• DataFrames es un link DataSets de tipo Row.

8
Spark SQL

2. Conceptos básicos de Spark

Arquitectura

Krishna Sankar. Packt 2016

9
Spark SQL

2. Conceptos básicos de Spark

Introducción a los Data Frames (DF)


• Es una estructura de datos que representa una tabla con filas y columnas.
• Son una capa de abstracción por encima de los RDD.
• Comparten por tanto algunas características: Inmutables, Resilientes,
Distribuidos en memoria, Transformaciones, Acciones, Persistencia
(Caching),…
• Tiene un Schema:
• Lista con los nombres de las columnas y tipos de datos del Data Frame.
• Para su tratamiento permite usar tanto lenguaje SQL, como funciones
para el procesamiento.

10
Spark SQL
2. Conceptos básicos de Spark

Introducción a los Data Frames (DF)


• Está distribuido en la memoria del clúster Spark.
• Diferencia con un Data Frame de Pandas, R o un fichero Excel.
• Para trabajar con los datos en paralelo Spark divide los datos en bloque
denominados particiones.
• Con una sola partición, Spark tendría un paralelismo de 1, aunque tuvieras
miles de Executors.
• A la hora de operar con DF trabajamos con él como un todo, sin preocuparnos
de las particiones.

11
Spark SQL

2. Conceptos básicos de Spark

Introducción a los Data Frames (DF)


• Los data frames pueden crearse a partir de:
• Otros RDD’s
• Fuente de datos semi estructuradas: CSV, JSON, Mongo, Elastic Search…
• Fuentes de datos estructuradas y bases de datos: Archivos Parquet, ORC,
Hive, MySQL, SQL Server,..
• Débilmente tipados
• Comprobación de tipos en tiempo de ejecución en base a su esquema.

12
Spark SQL

2. Conceptos básicos de Spark

Data Set (DS)


• Estructura similar al Dataset cuya principal diferencia es que:
• Los tipos de datos se comprueban en tiempo de compilación.
• Por esta razón solo están disponibles en las API’s para lenguajes Java y
Scala
• No podemos usarlos en Python.
• Para este curso únicamente es necesario conocer su existencia.
• En general son menos usados en comparación con los Data Frames.
• También son menos óptimos en muchos casos.

13
Spark SQL

2. Conceptos básicos de Spark

Spark Session
• Cuando trabajamos con la API SQL tenemos que iniciar la sesión de
Spark SQL con un objeto Spark Session.
• Un Spark Session contiene siempre un Spark Context.
• Importar las librerias
• from pyspark.sql import SparkSession
• Creación del Spark Session
spark = SparkSession \
.builder \
.appName(‘MyApp') \
.master('local[*]') \
.getOrCreate()

14
Spark SQL

2. Conceptos básicos de Spark

Spark Session
• Método .getOrCreate()
• Si existe una sesión previa podemos recuperarla.
• Si no existe se crea una nueva.
• Es recomendable cerrar la sesión:
• spark.stop()

15
Spark SQL

2. Conceptos básicos de Spark

Creando un Data Frame (Pyspark Shell)


• Iniciar el shell de Spark
• pyspark
• Automáticamente se crea el Spark Sesión (variable spark)
• Crear algunos datos.
• array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
• Importar el tipo de datos entero de Spark SQL
• from pyspark.sql.types import IntegerType
• Crear el Data Frame.
• myDF = spark.createDataFrame(mylist, IntegerType())

16
Spark SQL

2. Conceptos básicos de Spark

Creando un Data Frame (Pyspark Shell)


• Mostrar el resultado
• myDF.show()
• Imprimir el esquema
• myDF.printSchema()
• Sumar valores de la columna value
• myDF.agg({'Value':'sum'}).show()
• myDF.selectExpr("sum(Value) as suma").show()

17
Spark SQL

3. Carga de datos en Data Frames

eae.es
18
Spark SQL

2. Carga de datos en un DF

Carga de datos
• A partir de un RDD previamente existente
• person = [('Matt','Paris'),('Gill','Tokio'),('Mark','Casablanca')]
• personDF = spark.SparkContext.parallelize(person).toDF()
• A partir de ficheros o bases de datos
• Usando el método .read del Spark Session
• Varias formas de usarlo
1. spark.read.csv('sales_info.csv',inferSchema=True,header=True)

2. df = spark.read.format("csv"). \
option("header", "true"). \
option("inferSchema", "true"). \
load("sales_info.csv")

19
Spark SQL

2. Carga de datos en un DF

Fuentes de datos soportadas por el método read


• Como parte del núcleo de Spark
• CSV
• JSON
• Parquet
• ORC
• Conexiones J/ODBC
• Archivos de texto plano
• Aportaciones de la comunidad Spark
• Cassandra
• Hbase
• Mongo DB
• XML
• Y muchas otras….

20
Spark SQL

2. Carga de datos en un DF

Uso del método read


• Accedemos a través del método read del Spark Session
• Tenemos que especificar los siguientes parámetros
• Formato (csv, json,…)
• Ruta del archivo (local, HDFS, S3,…)
• Esquema (opcional, en algunos casos puede inferirlo)
• Modo de lectura (opcional, por defecto ‘permissive’)
• Otras muchas opciones, según el formato.
• Varias formas de usarlo
1. spark.read.csv('sales_info.csv',inferSchema=True,header=True)
2. df = spark.read.format("csv"). \
option("header", "true"). \
option("inferSchema", "true"). \
load("sales_info.csv")

21
Spark SQL

2. Carga de datos en un DF

Definición explicita del esquema


• Importamos los tipos de datos de Spark SQL que necesitamos
• from pyspark.sql.types import
StructField,StringType,IntegerType,StructType
• Definimos el esquema, a partir de una lista de campos de estructura
• StructField(name,dataType, nullable),
• name: string, nombre del campo.
• pdataType: :class:`DataType` tipo de datos del campo.
• nullable: boolean, si el campo soporta valores nulos.

• data_schema = [StructField("age", IntegerType(),


True),StructField("name", StringType(), True)]

• final_struc = StructType(fields=data_schema)

• df = spark.read.json('people.json', schema=final_struc)

22
Spark SQL

4. Principales funciones Data Frames

eae.es
23
Spark SQL

4. Principales funciones Data Frames

Introducción a los Data Frames


Dos tipos de operaciones DF, al igual que en RDD
• Transformaciones
• Permiten crear un nuevo Data Frame (DF) a partir de uno existente.
• select, selecExpr, filter, withColumn, sortBy, distinct, join, unión, etc.
• No se ejecutan hasta que no se ejecuta una acción (“lazy
evaluation”).
• Acciones
• Operaciones que ejecutan las transformaciones y devuelven un
resultado
• El resultado puede ser un nuevo Data Frame, un Array, un
escalar u otros objetos
• Ejemplos: show, take, count, cache, write, etc.

24
Spark SQL

4. Principales funciones Data Frames

Funciones de utilidad y acceso a columnas


• Función show(n=20, truncate=True)
• Imprime las primeras n filas por pantalla
• Parámetros:
• N – número de filas a mostrar (20 por defecto)
• Truncate – si queremos truncar las columnas con strings a mostrar,
podemos pasarle un valor .True = 20 caracteres por defecto.
• Función printSchema()
• Imprime el esquema del Data Frame

25
Spark SQL

4. Principales funciones Data Frames

Transformaciones básicas
• Acceso a las columnas
• Opción 1 : Por nombre de la columna, df[‘Company’]
• Opción 2: Por posición, df[0]
• Opción 3: Por nombre de la columna, ‘Company’
• Otras opciones: Mediante las funciones expr, col, column
• from pyspark.sql.functions import expr, col, column
• col("Sales")
• select(): retorna un nuevo DF con las columnas seleccionadas
1. df.select(df['Company'],df['Person'])
2. df.select(df[0],df[1])
3. df.select('Company','Person’)
4. df.select(col("Company"),col("Person"))
5. df.select(df.Company, df.Person)

26
Spark SQL

4. Principales funciones Data Frames

Transformaciones básicas
• Usando expr tengo la posibilidad de aplicar operaciones a las columnas
• from pyspark.sql.functions import expr
• df.select(expr("Company as compania"),expr("Sales * 2 as ventasPor2"))
• selectExpr(): Como es frecuente usar select con expresiones, esta función permite
hacerlo sin tener que usar la función expr.
• df.selectExpr("Company as compania","Sales * 2 as ventasPor2")
• Pero también así con ayuda de la función alias:
• df.select(df['Company'].alias('compania'),(df['Sales']*2).alias(
'ventasPor2’))
• Múltiples formas de trabajar con el DF para
obtener el mismo resultado.

27
Spark SQL

4. Principales funciones Data Frames

Transformaciones básicas
• withColumn(): Permite añadir una nueva columna al Data Frame.
• from pyspark.sql.functions import lit
• df.withColumn('A number',lit(1))

• df.withColumn('SalesOver200',expr("Sales >=200")).show()

• withColumnRenamed(): Permite renombrar una columna, aunque también podría


hacerse con el método anterior.
• df.withColumnRenamed('Sales','Ventas').show()

28
Spark SQL

4. Principales funciones Data Frames

Transformaciones básicas
• where: Permite aplicar una expresión de filtrado al Data Frame.
• df.where(df['Company'] == 'GOOG')

• Múltiples filtros en una misma expresión


• df.where((df['Sales']>200) | (df['Company'] == 'GOOG'))
• df.where((df['Sales']>200) & (df['Company'] == 'GOOG'))

• En el caso de necesitar multiples filtros And, Podemos


concatenarlos
• df.where(df['Sales']>200).where(df['Company'] == 'GOOG')

• Se puede utilizer sintaxis sql


• df.where('Sales >200 or Company = “GOOG”'))

• La operación filter es equivalente


• df.filter(df['Sales']>200)
29
Spark SQL

4. Principales funciones Data Frames

Transformaciones básicas
• orderBy: Permite ordenar un DF por orden ascendente o descendente de una o más
columnas.
• df.orderBy(df['Sales’])

• Por defecto orden ascendente, se puede indicar


explicitamente
• df.orderBy(df['Sales'].desc())

• La operación sort es equivalente


• df.sort(df['Sales'].desc())

30
Spark SQL

4. Principales funciones Data Frames

Transformaciones básicas
• distinct: Permite generar un Data Frame sin filas duplicadas.
• from pyspark.sql.functions import *
• df.select('Company').distinct()

• union: Permite concatenar dos DF en un nuevo DF. Ambos DF deben tener el mismo
esquema.
• dfSales2.show()

• dfSales2.show()
• df3union = df.union(dfSales2)

31
Spark SQL

4. Principales funciones Data Frames

Transformaciones de agregación
• count: Permite hacer un recuento de los valores que tiene una columna, devolviendo el
resultado como una columna de un nuevo DF. No tiene en cuenta los valores NULL.
• df.select(count(df['Company']))

• countDistinct : Similar a la anterior, pero solo tiene recuenta los valores que son
distintos en la columna indicada.
• df.select(countDistinct(df['Company’]))
• df.select(countDistinct(df['Company']).alias('Companias
Distintas'))

• min and max: Calculo de valores máximos y mínimos para un columna indicada.
• df.select(min(df['Sales']),max(df['Sales']))

32
Spark SQL

4. Principales funciones Data Frames

Transformaciones de agregación
• sum: Cálculo de la suma total de todos los valores de una columna.
• df.select(sum(df['Sales’]))
• avg: Cálculo de la media de los valores de una columna. Mean() es equivalente.
• df.select(sum(df['Sales']).alias('ventasTotales'),avg(df[
'Sales']).alias('mediaVentas’))
• varianza y desviación estándar: Cálculo de la varianza y desviación estándar de
una columna.
• df.select(variance('Sales'),stddev('Sales’))
• describe: Devuelve un nuevo DF con el recuento, media, stdev, mínimo y máximo de
cada una de las columnas del DF sobre el que se aplica. Es útil para la exploración
estadística de un DF, por ejemplo en un proceso de ML.
• df.select(variance('Sales'),stddev('Sales’))

33
Spark SQL

4. Principales funciones Data Frames

Transformaciones de agregación
• Hasta ahora agregaciones a nivel de DF
• Aplicamos la función de agregación sobre todos los valores de una columna de
DF.
• Es más común la agregación de valores sobre grupos de columnas del DF.
• Esto una operación Group By de SQL.
• En Spark SQL una operación Group By se implementa como:
1. Especificamos con el método GroupBy las columnas sobre las que queremos
agrupar.
2. Aplicamos una de las transformaciones de agregación que hemos visto
previamente.
• Ejemplo:
• df.groupBy(df['Company']).max()

34
Spark SQL

4. Principales funciones Data Frames

Transformaciones de agregación
• agg: Una alternativa para aplicar una función de agregación sobre los grupos creados
en el DF con groupBy, es usar una o más expresiones de agregación mediante agg().

• Es más flexible que la aplicación de funciones de agregación sobre el grupo.

• Por ejemplo, podemos renombrar la columna o columnas que contienen la


agregación resultante.

• df.groupBy(df['Company']). \

agg(sum(df['Sales']).alias('SumaVentas'),count(df['Sales'
]).alias('Recuento'))

35
Spark SQL

4. Principales funciones Data Frames

Transformaciones de unión
• Tipos de join soportados por Spark
• Inner joins: mantener solo las filas con las claves que existen al mismo
tiempo en los conjuntos de datos de la izquierda y la derecha.
• Outer joins: mantener filas con claves en los conjuntos de datos de la
izquierda o la derecha.
• Left outer joins: mantener las filas con las teclas en el conjunto de datos de
la izquierda.
• Right outer joins: mantener las filas con las claves en el conjunto de datos
de la derecha.
• Left semi joins: mantener las filas en la izquierda, y sólo la izquierda,
conjunto de datos donde la clave aparece en el conjunto de datos de la
derecha.
• Left anti joins: mantener las filas en la izquierda, y sólo la izquierda,
conjunto de datos donde no aparecen en el conjunto de datos de la derecha.
• Cross: producto Cartesiano.

36
Spark SQL

4. Principales funciones Data Frames

Transformaciones de unión
• Inner join.
• condition = dfA['colName'] == dfB['colName’]
• jointype = “inner”
• dfJoined = dfA.join(dfB, condition, jointype)

• Ejemplo:
• dfJoined = df.join(dfDesc,(df['Company'] ==
dfDesc['Company']),"inner")

37
Spark SQL

5. Persistencia

eae.es
38
Spark SQL
5. Persistencia
Destinos de datos
• Spark SQL incorpora integración “core” con 6 tipos de fuentes de datos
• CSV
• JSON
• Parquet
• ORC
• JDBC/ODBC
• Archivos de texto planos
• Y soporta muchas otras externas desarrolladas por la comunidad
• Cassandra
• MongoDB
• XML
• AWS Redshift
• Y muchas otras ...

39
Spark SQL
5. Persistencia
Método write
• Todas las fuentes anteriores implementan los métodos read() y write()
• Ya estudiamos previamente el método read() para cargar datos desde una
fuente a un DF
• Método write
• Permite guardar los datos de un DF en un sistema de almacenamiento.
• En la mayoría de casos, posible escritura en paralelo, de forma distribuida.
• Los parámetros esenciales:
• Formato (ej. CSV, JSON)
• Modo de escritura (ej. overwrite)
• Ruta de la carpeta.
• Pero cada formato puede añadir parámetros específicos

40
Spark SQL
5. Persistencia
Método write
• Los parámetros esenciales suelen ser:
• Formato (ej. CSV, JSON)
• Modo de escritura
• errorIfExists (por defecto): Falla si ya existen datos en la ruta.
• append: Añade archivos (datos) a la ruta.
• overwrite: Sobrescribe la ruta completa con los nuevos archivos (borra lo que había).
• ignore: Como errorIfExists pero sin generar error, no realiza la escritura simplemente
ignora la orden.
• Ruta de la carpeta
• La salida es una carpeta, dónde pueden haber uno o más archivos.
• También pueden haber subcarpetas en el caso de que apliquemos particionamiento.
• La carpeta padre representa al Dataset o tabla persistida.

41
Spark SQL
5. Persistencia
Escritura en CSV
• Ejemplo

• Algunos de los parámetros específicos que añade son:


• header : para persistir las cabeceras (nombres de las columnas)
• Sep: Carácter separador de los valores de las distintas columnas (por defecto es la ,)

42
Spark SQL
5. Persistencia
Escritura en Parquet
• Almacenar los datos en CSV está bien para escenarios en los que:
• Datos fuente solo disponibles en este formato
• Es un requisito para la salida final de los procesos.
• Sin embargo, se recomienda hacer uso de formatos de ficheros más
optimizados, como ORC o Parquet.
• Parquet es
• Un formato de archivo columnar  Optimo para selección de columnas y permite
añadir nuevas.
• Guarda el esquema de datos  No nos hace falta guardar los datos con cabeceras, ni
inferir los tipos de datos en lectura.
• Es Splittable  Optimiza la lectura distribuida y por tanto el procesamiento.

43
Spark SQL
5. Persistencia
Escritura en Parquet
• Parquet

• Por defecto usa compresión de tipo Snappy

• Optimiza el procesamiento frente al uso de ficheros no comprimidos.


• No obstante, se puede cambiar el tipo de compresión (uncompressed, gzip, bzip2,…)

44
Spark SQL
5. Persistencia
Escritura de datos en paralelo
• El número de archivos de datos escritos es dependiente del número
de particiones que el DF tiene en el momento de ejecutar la escritura.
• Por defecto, se escribe 1 fichero por partición
• Podemos alterar el número de particiones de un DF con método repartition(num
partitions)

45
Spark SQL
5. Persistencia
Escritura de datos en paralelo
• Particionado
• Técnica que permite crear particiones de los datos para decidir como se
almacenan los datos.
• Puede optimizar la lectura/escritura de datos:
• Leer/escribir datos solo para una partición o conjunto de ellas (filtro por
partición)
• Tamaño de archivos  Problema de los archivos pequeños en Hadoop,
también es un problema para Spark.

46
Spark SQL
5. Persistencia
Escritura de datos en paralelo
• Particionado
• Ejemplo de particionamiento por
columna compañía.

47
Spark SQL

6. Funciones avanzadas y UDF

eae.es
48
Spark SQL
6. Funciones avanzadas y UDF
Funciones avanzadas
• Spark SQL cuenta con muchas funciones avanzadas
• https://spark.apache.org/docs/latest/api/sql/index.html
• Tratamiento de fechas
• to_date, datediff, dayofmonth, from_utc_timestamp,…
• Funciones matemáticas y estadísticas
• approx_count_distinct, percentile, dense_rank, stdev_pop,
kurtosis, skewness, levenshtein,…
• Agregación
• rollup, grouping,...
• Tratamiento de tipos de datos complejos
• explode, named_struct, struct,…
• regexp_extract, xpath,…
• Otras
• monotonically_increasing_id, md5,…
49
Spark SQL
6. Funciones avanzadas y UDF
Funciones de ventana
• Nos permiten realizar operaciones avanzadas sobre agrupaciones de un
DF (groupBy)
• from pyspark.sql.window import Window, max, col, rank
• maxSales = max(dfCS["Sales"]).over(windowsSpec)
• rankSales = rank().over(windowsSpec)
• dfCS.select(df['Company'],df['Sales'], \
maxSales.alias('maxSales'), \
rankSales.alias('rankingCompania')).show()

50
Spark SQL
6. Funciones avanzadas y UDF
Funciones UDF
• Además de las funciones propias de Spark, el usuario puede crearse
sus propias funciones para aplicar sobre los elementos de un DF
• UDF: User Defined Functions
• Característica muy potente que permite aumentar la funcionalidad de Spark.
• Esta funciones puede construirse usando las librerías de Python o incluso librerías
externas.
• Por defecto, se registran como funciones temporales en el objeto Spark Session para
poder usarlas en los Worker Nodes.

51
Spark SQL
6. Funciones avanzadas y UDF
Funciones UDF
• Ejemplo:
• from pyspark.sql.functions import udf
• def potencia3(x):
return x ** 3
• potencia3udf = udf(potencia3)
• df.select(df['Company'],df['Person'],potencia3udf(df['Sales’]). \
alias('sales3power'))

52
Spark SQL

7. Técnicas de optimización

eae.es
53
Spark SQL
7. Técnicas de optimización
Algunas técnicas
• Algunas técnicas que nos permitirán optimizar nuestros programas Spark
• Lectura/escritura de datos en paralelo
• Uso de compresión en formatos de entrada salida
• Ajuste del particionado
• Evitar la recolección de datos excesivos al programa driver
• Cacheado de Data Frames

54
Spark SQL
7. Técnicas de optimización
Caching
• Funciona como una acción que computa las transformaciones previas y
guarda en resultado en memoria (por defecto) o disco
• df.cache()
• Se aplican los mismos principios que para los RDD
• Permite mejorar el rendimiento cuando un mismo DF se utiliza
• Como base para la creación de múltiples DF’s: distintas ramas del DAG que describe
el proceso a partir de ese nodo.
• En repetidas iteraciones de un algoritmo (ej. Machine Learning)
• Si solo se usa una vez ese DF en todo el programa, cachear no aporta mejoras.

55
Spark SQL

8. Modo SQL e integración con Hive

eae.es
56
Spark SQL
8. Modo SQL e integración con Hive
Modos SQL
• Hasta ahora hemos visto como trabajar con Data Frames usando las
funciones de la API de Spark SQL.
• Sin embargo, existen dos formas más de trabajar que permiten ejecutar
sentencias en lenguaje SQL (sin funciones, ANSI SQL:2003)
• Interfaz programática de SQL
• Spark SQL CLI
• Además, podemos levantar Spark como base de datos en memoria y
soportar conectividad J/ODBC
• Usando el servicio Thrift Server
• Gracias a el Catálogo (Catalog) podemos crear bases de datos y tablas con
persistencia aún cuando el proceso Spark esté apagado.

57
Spark SQL
8. Modo SQL e integración con Hive
Interfaz programática de SQL
• Permite ejecutar sentencias SQL
sobre un Data Frame.

• El resultado puede tratarse con


funciones de Spark SQL, es un Data
Frame.

• Mismo rendimiento. La única diferencia


es que la depuración de errores es
más compleja que usando funciones
de Spark SQL.

58
Spark SQL
8. Modo SQL e integración con Hive
Sparl SQL CLI
• Útil para hacer consultas SQL en modo local desde línea de comandos
• No se puede comunicar con Thrift J/OBDC Server.
• Para iniciarlo ejecutar:
• ./bin/spark-sql
• Para configurar la integración con Hive es necesario copiar los siguientes
archivos en /conf
• hive-site.xml, core-site.xml, and hdfs-site.xml

59
Spark SQL
8. Modo SQL e integración con Hive
Thrift Server
• Permite levantar Spark como base de datos en memoria y soportar
conectividad J/ODBC
• Por ejemplo, puede ser útil para conectar Spark con Tableau.
• Para iniciar Thrift Server ejecutar el script
• ./sbin/start-thriftserver.sh
• Por defecto, el servidor escucha en el Puerto 10000
• localhost:10000

60
Spark SQL
8. Modo SQL e integración con Hive
Integración con Hive
• Antes del auge de Apache Spark, Hive era la principal herramienta para el
procesamiento de Big Data con SQL.
• Hasta Facebook, creador de Apache Hive, hace uso de Spark para ejecutar cargas de
trabajo previamente implementadas en Hive.
• Apache Spark permite integrarse perfectamente con Hive:
• Acceso de lectura/escritura a las misma base de datos (Hive Metastore)
• Es necesario configurar spark.sql.hive.metastore.versión para indica la versión de
Hive a la que se accede.
• Soporte para queries con sintaxis HiveQL

61
Spark SQL

9. Casos de uso

eae.es
62
Spark SQL
9. Casos de uso
Algunos casos de uso
• Actualmente Spark se está usando como parte fundamental de las
arquitecturas Big Data en muchas empresas.
• Procesos de calidad de datos en comunicaciones direccionales
• Plataforma Big Data de Uber
• Empresas de Logística (ej. optimización de rutas, consumo de combustible,…)
• Sector Turismo (ej. análisis de datos de transporte)
• Análisis de datos de campañas de marketing digital
• Plataformas de empresas del sector energético
• Y muchas otras más,….

63
Spark SQL
9. Casos de uso
Calidad de datos
• https://aws.amazon.com/es/solutions/case-studies/buildfax/
• BuildFax entrega todos sus datos por dirección postal.
• La información de la dirección a veces es bastante escasa: Número de la calle, el nombre de la
calle y el condado, pero no la ciudad, el estado o el código postal.

• Este proceso requiere ejecutar 750 millones de combinaciones de direcciones


diferentes
• Recorrer los valores posibles (todos los códigos postales de un condado, todas las ciudades de un condado,
etc.), marcar las posibles coincidencias y corregir usando los resultados.
• No sería posible sin Spark en Amazon Elastic MapReduce (Amazon EMR)
• Con hasta 80 nodos, se mantienen los tiempos de ejecución por debajo de las 3 horas por dataset
de entrada.

64
Spark SQL
9. Casos de uso
Calidad de datos
• Ejemplo de arquitectura

65
Spark SQL
9. Casos de uso
Calidad de datos
• Ejemplo de código
• Comparación de las direcciones contra callejeros de Correos,…
• Fuzzy Matching: Definición de algoritmo de de-duplicación basado en técnicas
estadísticas (Cadenas de levensthein ponderadas).

66
Spark SQL
9. Casos de uso
Plataforma Big Data de Uber
• Spark se usa en Uber para los procesos ETL y Machine Learning.
• https://eng.uber.com/uber-big-data-platform/

67
We make
it happen

FIN UNIDAD

eae.es

También podría gustarte