En este módulo, aprenderemos cómo cargar y guardar datos en Apache Spark. Este es un aspecto fundamental del procesamiento de datos, ya que Spark se utiliza a menudo para transformar y analizar grandes volúmenes de datos que se encuentran en diversas fuentes. A lo largo de esta sección, cubriremos los siguientes temas:

  1. Introducción a la carga y guardado de datos en Spark
  2. Cargar datos desde diferentes fuentes
  3. Guardar datos en diferentes formatos
  4. Ejemplos prácticos
  5. Ejercicios prácticos

  1. Introducción a la carga y guardado de datos en Spark

Apache Spark proporciona una API unificada para cargar y guardar datos en una variedad de formatos y fuentes de datos. Esto incluye archivos CSV, JSON, Parquet, bases de datos relacionales, y más. La capacidad de Spark para manejar diferentes formatos de datos y fuentes lo hace extremadamente versátil para el procesamiento de datos.

  1. Cargar datos desde diferentes fuentes

2.1 Cargar datos desde archivos CSV

Para cargar datos desde un archivo CSV, utilizamos el método spark.read.csv(). Aquí hay un ejemplo básico:

from pyspark.sql import SparkSession

# Crear una sesión de Spark
spark = SparkSession.builder.appName("CargarDatosCSV").getOrCreate()

# Cargar datos desde un archivo CSV
df = spark.read.csv("ruta/al/archivo.csv", header=True, inferSchema=True)

# Mostrar las primeras filas del DataFrame
df.show()

Explicación:

  • header=True: Indica que el archivo CSV tiene una fila de encabezado.
  • inferSchema=True: Permite a Spark inferir automáticamente el tipo de datos de cada columna.

2.2 Cargar datos desde archivos JSON

Para cargar datos desde un archivo JSON, utilizamos el método spark.read.json(). Aquí hay un ejemplo:

# Cargar datos desde un archivo JSON
df = spark.read.json("ruta/al/archivo.json")

# Mostrar las primeras filas del DataFrame
df.show()

2.3 Cargar datos desde archivos Parquet

Parquet es un formato de almacenamiento columnar que es eficiente para el almacenamiento y la consulta de grandes conjuntos de datos. Para cargar datos desde un archivo Parquet, utilizamos el método spark.read.parquet():

# Cargar datos desde un archivo Parquet
df = spark.read.parquet("ruta/al/archivo.parquet")

# Mostrar las primeras filas del DataFrame
df.show()

2.4 Cargar datos desde una base de datos

Para cargar datos desde una base de datos relacional, utilizamos el método spark.read.jdbc(). Aquí hay un ejemplo:

# Definir la URL de la base de datos y las propiedades de conexión
url = "jdbc:mysql://localhost:3306/nombre_base_datos"
properties = {
    "user": "usuario",
    "password": "contraseña",
    "driver": "com.mysql.jdbc.Driver"
}

# Cargar datos desde una tabla de la base de datos
df = spark.read.jdbc(url=url, table="nombre_tabla", properties=properties)

# Mostrar las primeras filas del DataFrame
df.show()

  1. Guardar datos en diferentes formatos

3.1 Guardar datos en archivos CSV

Para guardar datos en un archivo CSV, utilizamos el método df.write.csv(). Aquí hay un ejemplo:

# Guardar datos en un archivo CSV
df.write.csv("ruta/de/salida.csv", header=True)

3.2 Guardar datos en archivos JSON

Para guardar datos en un archivo JSON, utilizamos el método df.write.json():

# Guardar datos en un archivo JSON
df.write.json("ruta/de/salida.json")

3.3 Guardar datos en archivos Parquet

Para guardar datos en un archivo Parquet, utilizamos el método df.write.parquet():

# Guardar datos en un archivo Parquet
df.write.parquet("ruta/de/salida.parquet")

3.4 Guardar datos en una base de datos

Para guardar datos en una base de datos relacional, utilizamos el método df.write.jdbc(). Aquí hay un ejemplo:

# Guardar datos en una tabla de la base de datos
df.write.jdbc(url=url, table="nombre_tabla_salida", mode="overwrite", properties=properties)

  1. Ejemplos prácticos

Ejemplo 1: Cargar y guardar datos CSV

# Crear una sesión de Spark
spark = SparkSession.builder.appName("EjemploCSV").getOrCreate()

# Cargar datos desde un archivo CSV
df = spark.read.csv("ruta/al/archivo.csv", header=True, inferSchema=True)

# Realizar alguna transformación (por ejemplo, filtrar filas)
df_filtrado = df.filter(df["columna"] > 10)

# Guardar los datos filtrados en un nuevo archivo CSV
df_filtrado.write.csv("ruta/de/salida_filtrada.csv", header=True)

Ejemplo 2: Cargar y guardar datos JSON

# Crear una sesión de Spark
spark = SparkSession.builder.appName("EjemploJSON").getOrCreate()

# Cargar datos desde un archivo JSON
df = spark.read.json("ruta/al/archivo.json")

# Realizar alguna transformación (por ejemplo, seleccionar columnas)
df_seleccionado = df.select("columna1", "columna2")

# Guardar los datos seleccionados en un nuevo archivo JSON
df_seleccionado.write.json("ruta/de/salida_seleccionada.json")

  1. Ejercicios prácticos

Ejercicio 1: Cargar y guardar datos CSV

Instrucciones:

  1. Carga un archivo CSV que contenga datos de ventas.
  2. Filtra las filas donde las ventas sean mayores a 1000.
  3. Guarda los datos filtrados en un nuevo archivo CSV.

Solución:

# Crear una sesión de Spark
spark = SparkSession.builder.appName("EjercicioCSV").getOrCreate()

# Cargar datos desde un archivo CSV
df = spark.read.csv("ruta/al/archivo_ventas.csv", header=True, inferSchema=True)

# Filtrar las filas donde las ventas sean mayores a 1000
df_filtrado = df.filter(df["ventas"] > 1000)

# Guardar los datos filtrados en un nuevo archivo CSV
df_filtrado.write.csv("ruta/de/salida_ventas_filtradas.csv", header=True)

Ejercicio 2: Cargar y guardar datos JSON

Instrucciones:

  1. Carga un archivo JSON que contenga datos de usuarios.
  2. Selecciona las columnas "nombre" y "edad".
  3. Guarda los datos seleccionados en un nuevo archivo JSON.

Solución:

# Crear una sesión de Spark
spark = SparkSession.builder.appName("EjercicioJSON").getOrCreate()

# Cargar datos desde un archivo JSON
df = spark.read.json("ruta/al/archivo_usuarios.json")

# Seleccionar las columnas "nombre" y "edad"
df_seleccionado = df.select("nombre", "edad")

# Guardar los datos seleccionados en un nuevo archivo JSON
df_seleccionado.write.json("ruta/de/salida_usuarios_seleccionados.json")

Conclusión

En esta sección, hemos aprendido cómo cargar y guardar datos en Apache Spark desde y hacia diferentes formatos y fuentes de datos. Estos son conceptos fundamentales que te permitirán trabajar con datos en Spark de manera eficiente. En el próximo módulo, profundizaremos en las operaciones con DataFrames, donde aprenderás a manipular y transformar datos de manera más avanzada.

© Copyright 2024. Todos los derechos reservados