Lectura y escritura de DataFrames en Apache Spark
Clase 15 de 25 • Curso de Databricks: Arquitectura Delta Lake
En Apache Spark, un DataFrame es una estructura de datos distribuida que se organiza en filas y columnas. Es una abstracción de datos tabulares que se asemeja a una tabla en una base de datos relacional o a un DataFrame en lenguajes de programación como R o Python.
Resulta importante mencionar que un DataFrame en Spark puede ser creado a partir de diversas fuentes de datos como archivos CSV, JSON, Parquet, bases de datos SQL, entre otros. Por supuesto, también lo podemos crear desde 0.
En esencia, un dataframe proporciona una interfaz de programación para manipular y procesar datos de manera distribuida en un clúster de computadoras. A este tipo de objeto también es posible aplicarle transformaciones y acciones en Spark.
Algunas características clave de los DataFrames en Apache Spark son:
- Inmutabilidad: Al igual que en otros contextos de Spark los DataFrames son inmutables, lo que significa que no se pueden modificar directamente después de su creación. Las transformaciones en un Dataframe crean otro nuevo.
- Optimización de consultas: Spark optimiza automáticamente las consultas en los DataFrames utilizando su motor de ejecución Catalyst. Esto permite realizar operaciones de manera eficiente y optimizada.
- Soporte para varios lenguajes: Los DataFrames en Spark están disponibles en varios lenguajes de programación como Scala, Java, Python y R, lo que facilita su uso en diferentes entornos.
- Integración con fuentes de datos externas: Pueden leer y escribir datos desde y hacia una variedad de fuentes de datos, lo que facilita la integración con diferentes sistemas y formatos.
- API rica: Los DataFrames proporcionan una API rica que permite realizar operaciones complejas de manipulación y análisis de datos de manera declarativa, lo que facilita la expresión de la lógica de procesamiento.
Por lo tanto, podemos concluir que los DataFrames en Apache Spark ofrecen una interfaz de alto nivel para el procesamiento de datos distribuidos, facilitando la manipulación y el análisis de grandes conjuntos de datos de manera eficiente en clústeres de computadoras.
Escritura y lectura de dataframes en Spark
En Apache Spark, la lectura y escritura de DataFrames se realiza utilizando las API correspondientes proporcionadas por Spark.
Lectura de DataFrames:
A. Desde un archivo CSV:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("example").getOrCreate() df = spark.read.csv("ruta/del/archivo.csv", header=True, inferSchema=True)
En este ejemplo, header=True indica que la primera fila del archivo CSV contiene nombres de columnas, y inferSchema=True intentará inferir automáticamente los tipos de datos de las columnas.
B. Desde un archivo Parquet:
df = spark.read.parquet("ruta/del/archivo.parquet")
Parquet es un formato de almacenamiento eficiente para datos estructurados y es compatible con Spark.
C. Desde una tabla de base de datos SQL:
df = spark.read.jdbc(url="jdbc:mysql://localhost:3306/base_de_datos", table="nombre_tabla", properties={"user": "usuario", "password": "contraseña"})
En este ejemplo se lee desde una tabla de una base de datos SQL.
Escritura de DataFrames:
-
A un archivo CSV:
df.write.csv("ruta/de/destino", header=True)
Esto escribirá el DataFrame en formato CSV en la ruta especificada.
-
A un archivo Parquet:
df.write.parquet("ruta/de/destino")
Escribir en formato Parquet es eficiente y puede ser una buena opción para el almacenamiento a largo plazo.
-
A una tabla de base de datos SQL:
df.write.jdbc(url="jdbc:mysql://localhost:3306/base_de_datos", table="nombre_tabla", mode="overwrite", properties={"user": "usuario", "password": "contraseña"})
En este ejemplo, mode="overwrite" indica que se sobrescribirán los datos si la tabla ya existe. Otras opciones incluyen "append" y "ignore".
Más información: https://spark.apache.org/docs/latest/sql-programming-guide.html