Fundamentos del Data Management con Databricks

1

Gestión Avanzada de Big Data con Databricks y Delta Lake

2

Fundamentos de Databricks para Big Data y Machine Learning

3

Arquitectura de Clústeres en Databricks: Procesamiento y Almacenamiento

4

Uso de Apache Spark en Big Data: Procesamiento y Análisis

Quiz: Fundamentos del Data Management con Databricks

Administración y Gestion de la Plataforma de Databricks

5

Creación y Configuración de Clúster en Databricks

6

Gestión de Datos y Notebooks en Databricks File System

7

Transformaciones y Acciones en Apache Spark

8

Conceptos básicos de RDDs en Apache Spark

9

Creación y Transformaciones de RDDs en Databricks

10

Acciones en Apache Spark: Uso y Ejemplos Prácticos

11

Lectura de Datos en Apache Spark con Databricks

12

Exploración de SparkUI en Databricks: Monitorización y Configuración

13

Instalación de Librerías en Databricks paso a paso

14

Alternativas para Trabajar con Apache Spark: Local vs. Nube

Quiz: Administración y Gestion de la Plataforma de Databricks

Apache Spark SQL y UDF

15

Lectura y escritura de DataFrames en Apache Spark

16

Comandos en Apache Spark SQL: Uso Práctico y Ejemplos

17

Consultas y Filtrado Avanzado con Spark SQL

18

Creación y Uso de Funciones UDF en Apache Spark

Quiz: Apache Spark SQL y UDF

Implementacion de un Delta Lake en Databricks

19

Arquitecturas Data Lake y Delta Lake en Big Data

20

Delta Lake: Almacenamiento y Gestión de Datos en Big Data

21

Arquitectura Medallion en Data Lake House: Capas Bronze, Silver y Gold

22

Comandos Esenciales para Databricks File System (DBFS)

23

Implementación de arquitectura Delta Lake en Databricks

24

Arquitectura Delta Lake: Creación de Capas Bronce, Silver y Gold

25

Gestión de Datos Avanzada con Databricks y Delta Lake

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Consultas y Filtrado Avanzado con Spark SQL

17/25
Recursos

¿Cómo trabajar con archivos y esquemas en Spark SQL?

Para triunfar en el manejo de datos, es esencial comprender cómo leer y manipular información adecuadamente. En el contexto de Spark SQL, aprender a importar y definir esquemas es el primer paso crucial. Comencemos cargando un archivo persona.data, al cual aplicamos un esquema de metadatos. Esto nos permite especificar claramente los tipos de datos para cada campo, como ID, nombre o correo electrónico.

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([
    StructField("ID", StringType(), True),
    StructField("Nombre", StringType(), True),
    StructField("Teléfono", StringType(), True),
    # Añade los demás campos aquí
])

dfPersona = spark.read.format("csv") \
    .option("header", "true") \
    .schema(schema) \
    .load("/FileStore-CursoDatabricks/persona.data")
dfPersona.show(10)

Este enfoque asegura que puedas manejar los datos adecuadamente, reduciendo riesgos de errores al definir claramente los tipos.

¿Cómo crear y manejar una vista temporal?

Para mejorar el manejo de consultas SQL en Spark, es esencial crear una vista temporal de los datos. Esto nos permite interactuar con los datos como si fueran una tabla en SQL. Crear una vista es sencillo:

dfPersona.createOrReplaceTempView("dfPersonaView")

Una vez creada, puedes ejecutar consultas SQL directamente sobre esta vista:

result = spark.sql("SELECT * FROM dfPersonaView WHERE edad > 30")
result.show(10)

Esto simplifica la aplicación de filtros y condiciones, maximizando la eficiencia en tu análisis de datos.

¿Cómo optimizar consultas largas en Spark SQL?

Las consultas extensas pueden complicarse y volverse difíciles de manejar. Aquí destacamos el uso de triple comillas para simplificar y estructurar consultas largas, haciéndolas más legibles:

query = """
SELECT id, nombre, correo
FROM dfPersonaView
WHERE edad > 30 AND salario > 5000
"""
dfResult = spark.sql(query)
dfResult.show(10)

Este método mejora la claridad del código, facilitando el entendimiento y mantenimiento de tus consultas.

¿Qué ventajas tiene la parametrización en consultas SQL?

Incorporar parámetros en tus consultas añade dinamismo y flexibilidad, permitiendo cambios sin modificar la lógica SQL:

paramEdad = 30
paramSalario = 5000

query = f"""
SELECT id, nombre, correo
FROM dfPersonaView
WHERE edad > {paramEdad} AND salario > {paramSalario}
"""
dfResult = spark.sql(query)
dfResult.show(10)

La parametrización permite una gestión más eficiente y adaptable de tus consultas, agilizando los procesos de modificación y mantenimiento.

¿Cómo practicar y aplicar estos conceptos?

Nada refuerza el aprendizaje más que la práctica continua. Aquí te presentamos tres ejercicios que te permitirán aplicar lo aprendido:

  1. Seleccionar nombre y edad de personas mayores de 28 años.
  2. Calcular la edad promedio en el DataFrame.
  3. Extraer nombre, edad y dirección de personas con direcciones registradas.

Desafíate a resolver estos ejercicios utilizando las técnicas presentadas y fortalece tus habilidades en Spark SQL. ¡Sigue explorando, aprendiendo y dominando este vasto mundo de la gestión de datos!

Aportes 12

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hola. Estuve revisando. Para el ejercicio 2 el promedio es erróneo (Incluso en el notebook de resolución). Este arroja 27.66666 pero el correcto es 27.3333. Esto es porque aunque se agregaron los nuevos valores a la variable df, esta no se actualizó en la vista, originando no solamente el error en el punto 2 sino también en el punto 3. Asi lo corregí (actualizando la vista \[líneas 12 y 13]): ![](https://static.platzi.com/media/user_upload/image-aa81f35d-954d-4d3b-a74a-b28df5a14c72.jpg) De hecho, respecto a dicho punto 3 utilicé el right join para tomar todos los datos de las direcciones y traer los que crucen con las personas. A continuación dejo segundo screenshot: ![](https://static.platzi.com/media/user_upload/image-8da12c32-e557-46a4-b2ba-6453be976c36.jpg) Esto también se podría ejecutar como ```js SELECT p.nombre ,p.edad ,p.direccion FROM personas p FULL OUTER JOIN direcciones d ON p.id = d.id WHERE d.direcciones IS NOT NULL ```Ya que toma todos los datos de ambas tablas y filtra según lo que requerimos (que la direccion no sea nula). Espero que les pueda servir compañeros. Buen dia :)
![](https://static.platzi.com/media/user_upload/image-163c88d3-b5b6-467b-a708-a11e258e5158.jpg) ![](https://static.platzi.com/media/user_upload/image-bfd754c0-9307-451e-87b0-f6d684e1ec52.jpg) ![](https://static.platzi.com/media/user_upload/image-0f3b656a-57a5-477f-9c8f-438a54df3f61.jpg)
¡Entendido! Si estás trabajando en un laboratorio de PySpark SQL, seguramente estás explorando cómo usar las capacidades SQL en PySpark para consultas, análisis y manipulación de datos. ### Parte 2: Ejemplo estructurado para PySpark SQL A continuación, te guiaré a través de una estructura típica para trabajar con PySpark SQL en un laboratorio: #### 1. **Crear o cargar un DataFrame** Cargamos datos desde un archivo CSV o creamos un DataFrame manualmente. from pyspark.sql import SparkSession from pyspark.sql.functions import col \# Crear una SparkSession spark = SparkSession.builder.appName("PySpark SQL Lab").getOrCreate() \# Crear un DataFrame manualmente data = \[ (1, "Alice", 5000), (2, "Bob", 4000), (3, "Charlie", 7000), (4, "David", 10000), ] columns = \["id", "name", "salary"] df = spark.createDataFrame(data, columns) \# Mostrar los datos iniciales df.show() #### 2. **Registrar una vista temporal** Registrar una tabla temporal para ejecutar consultas SQL. \# Registrar el DataFrame como una tabla temporal df.createOrReplaceTempView("employees") #### 3. **Ejecutar consultas SQL** Usar Spark SQL para ejecutar consultas sobre los datos. \# Ejemplo 1: Seleccionar todos los registros result = spark.sql("SELECT \* FROM employees") result.show() \# Ejemplo 2: Filtrar empleados con salario mayor a 5000 result = spark.sql("SELECT \* FROM employees WHERE salary > 5000") result.show() \# Ejemplo 3: Agregar una columna calculada (bonus) result = spark.sql("SELECT \*, salary \* 0.1 AS bonus FROM employees") result.show() \# Ejemplo 4: Calcular la suma total de salarios result = spark.sql("SELECT SUM(salary) AS total\_salary FROM employees") result.show() #### 4. **Realizar transformaciones adicionales** Combinar operaciones SQL y funciones PySpark. \# Agregar una columna 'bonus' al DataFrame original y calcular el total df = df.withColumn("bonus", col("salary") \* 0.1) df = df.withColumn("total", col("salary") + col("bonus")) \# Mostrar el DataFrame actualizado df.show() #### 5. **Guardar los resultados** Guardar el resultado de las consultas o transformaciones en diferentes formatos. \# Guardar el DataFrame actualizado como un archivo CSV df.write.csv("output/employees\_with\_bonus", header=True)
**Ejercicio 2** ```python from pyspark.sql import functions as f #Ejercicio 2 - Resolucion (df.agg(f.avg("edad")).show()) # Completar ``` **Ejercicio 3** ```python #Ejercicio 3 - Resolucion df.join(df_direccion, df.id == df_direccion.id).select("nombre", "edad", "direccion").show() # Completar ```
![](https://static.platzi.com/media/user_upload/Imagen%20de%20WhatsApp%202024-08-09%20a%20las%2016.02.12_54a33e4c-32b4db28-9ed6-404c-a88c-e4a009a9dc0d.jpg) ![](https://static.platzi.com/media/user_upload/Imagen%20de%20WhatsApp%202024-08-09%20a%20las%2016.02.28_7251700e-a25b9688-f005-42e5-a5e7-044f4df66935.jpg) ![](https://static.platzi.com/media/user_upload/Imagen%20de%20WhatsApp%202024-08-09%20a%20las%2016.02.50_a2b01be3-ae98a87f-1fb1-4e43-92c1-edca17ef8b75.jpg)
![](https://static.platzi.com/media/user_upload/image-4ca843c6-172f-4a2b-bfc0-f5758ac24c94.jpg) ![](https://static.platzi.com/media/user_upload/image-8686abab-3b32-4812-bba6-ffde0f335f8a.jpg) ![](https://static.platzi.com/media/user_upload/image-c551b7cc-7f2b-4525-a7db-63f753918dc3.jpg)
![](https://static.platzi.com/media/user_upload/image-38eda59d-358b-4764-ad87-0d7288772ad1.jpg) ![](https://static.platzi.com/media/user_upload/image-92601c60-4c64-4cd4-aab8-e4d8773e60d6.jpg) ![](https://static.platzi.com/media/user_upload/image-e28abd05-2e5f-4598-8ac5-44ce32f3f617.jpg) Nota: para el punto 2 se debe crear una nueva vista o sobreescribir la anterior ya que no se veria la agregación de la fila en el ejercicio 2
**Resolución ejercicio 3:** usando sintaxis SQL y df.join ![](https://static.platzi.com/media/user_upload/image-399ee290-03d0-419b-b131-9925eac35b9d.jpg)
Mis resultados: ![](https://static.platzi.com/media/user_upload/upload-b0126fbd-5774-48fb-8191-42b80c356861.png)![](https://static.platzi.com/media/user_upload/upload-7c063cb9-e098-4aea-9287-b65bd0430fa9.png)![](https://static.platzi.com/media/user_upload/upload-4606672a-d385-4882-95fd-1febe34fb604.png)
Aqui mis respuestas:#Ejercicio 1 - Resolucionparam\_edad = 28spark.sql(f"""SELECT nombre, edad FROM personas WHERE edad > {param\_edad} """).show()#Ejercicio 2 - Resolucion#Ejercicio 3 - Resolucion spark.sql("""SELECT p.nombre, p.edad, d.direccion FROM personas p JOIN direcciones d ON p.id = d.id""").show() df.agg({'edad': 'avg'}).show() ```python #Ejercicio 1 - Resolucion param_edad = 28 spark.sql(f"""SELECT nombre, edad FROM personas WHERE edad > {param_edad} """).show() ``````python #Ejercicio 2 - Resolucion df.agg({'edad': 'avg'}).show() ``````js #Ejercicio 3 - Resolucion spark.sql("""SELECT p.nombre, p.edad, d.direccion FROM personas p JOIN direcciones d ON p.id = d.id""").show() ```
Hola les dejo la solución a los ejercicios Punto 1 ![](https://static.platzi.com/media/user_upload/image-5720f1a0-9240-46c7-a13d-5042dc345814.jpg) punto 2 ![](https://static.platzi.com/media/user_upload/image-114f1271-cba1-46e0-9fec-7f7e2bb0c6fe.jpg) punto 3 ![](https://static.platzi.com/media/user_upload/image-34cf93c5-8a64-480b-a864-c37791756646.jpg) resultado ![](https://static.platzi.com/media/user_upload/image-577fdf7d-94c2-4335-886c-a2886dca89e5.jpg)![](https://static.platzi.com/media/user_upload/image-8209cff4-d7f1-4435-8cb5-2e2066698a32.jpg)
Les comparto mis resultados: ![](https://static.platzi.com/media/user_upload/image-e3de2710-918b-48bd-8f64-88ce91529de0.jpg) Es necesario remplazar la vistas ![](https://static.platzi.com/media/user_upload/image-dc8d4e20-285b-422d-8fb9-3317981e9b85.jpg) ![](https://static.platzi.com/media/user_upload/image-59e03496-008c-4b61-a719-2906f3f13572.jpg) ![](https://static.platzi.com/media/user_upload/image-d49a34ed-e375-4a92-8185-fd32d4e3639c.jpg) Saludos.