Dominando Apache Spark (IV): Explorando los DataFrames

Nov 5, 2023 | Big Data | 0 Comentarios

En esta cuarta entrega de nuestra serie «Dominando Apache Spark», vamos a adentrarnos en los DataFrames. En el anterior artículo ya exploramos los RDD y le podéis echar un vistazo aquí.

Los DataFrames son una estructura de datos clave en Apache Spark que ofrece una forma eficiente y versátil de manejar y analizar datos a gran escala. En este artículo, exploraremos en profundidad las características, ventajas y diferencias fundamentales entre DataFrames y RDDs, así como su aplicación en situaciones del mundo real.

 

 

¿Qué son los DataFrames en Apache Spark?

Los DataFrames son una estructura de datos tabular, similar a una tabla en una base de datos relacional o una hoja de cálculo. Se organizan en columnas y filas, lo que facilita el almacenamiento y la manipulación de datos estructurados.

Aunque Apache Spark es conocido por su capacidad para procesar datos no estructurados o semiestructurados a través de RDDs, los DataFrames brindan una forma más intuitiva de trabajar con datos estructurados, como registros de bases de datos, archivos CSV o datos en formato JSON.

 

 

Características Clave de los DataFrames

Los DataFrames en Apache Spark tienen una serie de características clave que los hacen poderosos y versátiles:

  • Esquema Inferred y Estructura de Columnas: Los DataFrames incorporan un esquema inferido que define la estructura de las columnas. Esto facilita la comprensión y el análisis de los datos sin necesidad de definir un esquema explícitamente. Sin embargo, también puedes especificar un esquema personalizado si es necesario.
  • Optimización Catalyst: Apache Spark utiliza el optimizador Catalyst para optimizar las operaciones en los DataFrames, lo que conduce a un rendimiento más eficiente en las consultas y transformaciones.
  • Lenguajes Soportados: Los DataFrames son accesibles desde varios lenguajes de programación, como Scala, Python, Java y R, lo que permite a los desarrolladores trabajar en su lenguaje preferido.
  • Optimización de Caché: Puedes almacenar en caché (persistir) DataFrames en la memoria, lo que acelera el acceso a los datos y mejora el rendimiento en operaciones posteriores.

 

Diferencias Entre DataFrames y RDDs

Aunque los DataFrames comparten similitudes con los RDDs, existen diferencias clave que debes tener en cuenta:

  • Estructura de Datos: Los RDDs son estructuras de datos genéricas y no tienen una estructura de columna definida. En cambio, los DataFrames están diseñados específicamente para datos tabulares y tienen una estructura de columna.
  • Optimización: Los DataFrames aprovechan el optimizador Catalyst y Tungsten para mejorar el rendimiento de las consultas. Los RDDs no cuentan con estas optimizaciones específicas.
  • Tipado de Datos: Los DataFrames son tipados, lo que significa que los datos en cada columna tienen un tipo específico. Los RDDs son de tipo genérico y no tienen tipado estricto.
  • Interoperabilidad: Los DataFrames ofrecen una mejor interoperabilidad con fuentes de datos externas, como bases de datos relacionales, lo que simplifica la carga y el análisis de datos estructurados.

 

Creación de DataFrames en Apache Spark

La creación de DataFrames es el punto de partida para trabajar con datos estructurados en Apache Spark. DataFrames se pueden crear a partir de diversas fuentes de datos, y aquí exploraremos algunas de las formas más comunes de crear DataFrames.

  • Desde un RDD existente: Puedes crear un DataFrame a partir de un RDD (Resilient Distributed Dataset) existente. Esto es útil cuando ya tienes datos cargados como RDD y deseas trabajar con ellos en un formato más estructurado. Aquí tienes un ejemplo:
# Supongamos que tienes un RDD llamado rdd 
from pyspark.sql import SparkSession 
spark = SparkSession.builder.appName("MiApp").getOrCreate() 
df = spark.createDataFrame(rdd)
  • Desde un archivo CSV: Apache Spark admite la carga de datos desde archivos CSV. Puedes especificar el esquema y otras opciones al cargar un archivo CSV. Aquí hay un ejemplo:
from pyspark.sql import SparkSession 
spark = SparkSession.builder.appName("MiApp").getOrCreate() 
df = spark.read.csv("archivo.csv", header=True, inferSchema=True)

En este ejemplo, header=True indica que la primera fila del archivo CSV contiene encabezados de columna, y inferSchema=True intenta inferir automáticamente los tipos de datos de las columnas.

  • Desde una fuente de datos externa: Apache Spark admite la conexión a diversas fuentes de datos externas, como bases de datos, almacenes de datos en la nube, sistemas de archivos distribuidos, etc. Puedes utilizar las opciones correspondientes para cargar datos desde estas fuentes. Aquí hay un ejemplo de carga desde una base de datos:
from pyspark.sql import SparkSession 
spark = SparkSession.builder.appName("MiApp").getOrCreate() 
df = spark.read.jdbc(url="jdbc:mysql://localhost:3306/mibasededatos", table="mitabla", properties={"user": "usuario", "password": "contraseña"})
  • De manera programática: También puedes crear DataFrames programáticamente mediante la especificación de esquemas y datos. Esto es útil cuando deseas crear un DataFrame desde cero o generar datos de manera dinámica. Aquí tienes un ejemplo:
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, IntegerType 
spark = SparkSession.builder.appName("MiApp").getOrCreate() 
schema = StructType([StructField("nombre", StringType(), True), 
         StructField("edad", IntegerType(), True)]) 
data = [("Alice", 30), ("Bob", 25), ("Charlie", 35)] 
df = spark.createDataFrame(data, schema)

Estas son algunas de las formas comunes de crear DataFrames en Apache Spark. La elección de la técnica adecuada depende de tus necesidades y de la fuente de datos que estés utilizando.

 

 

 

Acciones en DataFrames

Al igual que en el caso de los RDD, las acciones en DataFrames son operaciones que desencadenan la evaluación y ejecución de las transformaciones definidas en el DataFrame. Aquí tienes algunos ejemplos de acciones comunes:

  • show(): La acción show() se utiliza para mostrar un número específico de filas del DataFrame. Puedes especificar la cantidad de filas que deseas mostrar como argumento.
df.show(5) # Muestra las primeras 5 filas del DataFrame
  • count(): La acción count() devuelve el número total de filas en el DataFrame.
total_filas = df.count() # Devuelve el número total de filas.
  • collect(): La acción collect() recopila todos los datos del DataFrame y los devuelve como una lista de filas en el lenguaje de programación en uso.
filas = df.collect() # Devuelve todas las filas del DataFrame como una lista.
  • take(): La acción take() devuelve una cantidad específica de filas del DataFrame como una lista.
primeras_filas = df.take(3) # Devuelve las primeras 3 filas del DataFrame.

 

Transformaciones en DataFrames

Las transformaciones en DataFrames son operaciones que modifican o crean nuevos DataFrames a partir de un DataFrame existente. Aquí tienes algunos ejemplos de transformaciones comunes:

  • select(): La transformación select() se utiliza para seleccionar columnas específicas de un DataFrame.
df_seleccionado = df.select("columna1", "columna2") # Selecciona columnas "columna1" y "columna2"
  • filter(): La transformación filter() permite filtrar filas basadas en una condición dada.
df_filtrado = df.filter(df["edad"] > 30) # Filtra filas donde la columna "edad" es mayor que 30
  • withColumn(): La transformación withColumn() se usa para agregar una nueva columna o reemplazar una existente.
df_con_nueva_columna = df.withColumn("nueva_columna", df["columna_existente"] * 2) # Agrega una nueva columna
  • groupBy() y agg(): Estas transformaciones se utilizan para agrupar filas en función de una o más columnas y realizar agregaciones.
df_agrupado = df.groupBy("ciudad").agg({"edad": "avg", "salario": "sum"}) # Agrupa por "ciudad" y calcula el promedio de "edad" y la suma de "salario"
  • orderBy(): La transformación orderBy() permite ordenar el DataFrame en función de una o más columnas.
df_ordenado = df.orderBy("nombre", ascending=False) # Ordena por "nombre" en orden descendente

Estos son solo algunos ejemplos de acciones y transformaciones que puedes realizar en DataFrames de Apache Spark.

 

Los DataFrames son una herramienta poderosa en el arsenal de Apache Spark para el procesamiento y análisis de datos estructurados. Su estructura tabular, optimización y compatibilidad con varios lenguajes hacen que sean una elección sólida para una amplia variedad de aplicaciones del mundo real. En el próximo artículo de esta serie, nos sumergiremos en otro componente esencial de Apache Spark: los Datasets. ¡No te lo pierdas!

 

Recuerda que esta es una serie en curso. Puedes encontrar todos los artículos anteriores en nuestra colección «Dominando Apache Spark».

También te puede interesar:

Dominando Apache Spark (I): Introducción y ventajas en el procesamiento de grandes volúmenes de datos

En el artículo, exploramos la historia y ventajas de Apache Spark como un marco de procesamiento de datos de código abierto. Destacamos su evolución y las razones para su popularidad en el procesamiento de datos a gran escala, incluyendo su velocidad y capacidad de procesamiento en memoria.

Las tendencias de Big Data y Machine Learning que dominarán en 2024

Descubre las tendencias de Big Data y Aprendizaje Automático que marcarán el rumbo en 2024, y cómo prepararte para el futuro tecnológico en este artículo informativo.

Dominando Apache Spark (II): Funcionamiento interno y arquitectura

En este artículo profundizamos en la arquitectura y el funcionamiento interno de Spark, destacando componentes clave.

Dominando Apache Spark (III): Explorando RDD (Resilient Distributed Datasets) y su poder en el procesamiento de datos

En este artículo exploramos RDD, una estructura fundamental para el procesamiento de datos distribuidos. Descubre cómo RDDs permiten la manipulación y transformación de datos a gran escala.

Dominando Apache Spark (V): Explorando los Datasets

En este tercer artículo de la serie «Dominando Apache Spark», exploramos las estructuras de datos clave: RDD, DataFrames y Datasets. Comparamos sus características y usos, brindando una visión completa de cómo trabajar con datos en Spark. Próximamente, nos enfocaremos en operaciones y transformaciones.

Dominando Apache Spark (VI): Diferentes tipos de Joins en DataFrames con ejemplos en PySpark

Descubre los secretos de los joins en DataFrames con Spark en este artículo. Aprende a utilizar diferentes tipos de joins en PySpark con ejemplos detallados para perfeccionar tus habilidades de procesamiento de datos.

Dominando Apache Spark (VII): Funciones para cargar y exportar datos en PySpark

En este artículo, exploramos funciones avanzadas para importar y exportar datos en PySpark.

Cómo la Inteligencia Artificial está revolucionando la atención médica

En este artículo vemos como la Inteligencia Artificial está revolucionando la atención médica, mejorando diagnósticos, tratamiento y gestión de pacientes, aunque presenta desafíos éticos y de seguridad.

Cómo el Big Data y la Inteligencia Artificial están revolucionando el Marketing

Exploramos la convergencia del Big Data y la Inteligencia Artificial en estrategias de marketing. Muestra cómo estas tecnologías impulsan la personalización, la automatización y la toma de decisiones informadas.

Dominando Apache Spark (VIII): El formato Parquet

Descubre cómo el formato Parquet en Apache Spark revoluciona la eficiencia del procesamiento de datos. Comprende sus ventajas, diferencias con otros formatos y aprende a utilizarlo con ejemplos prácticos.

Ads Blocker Image Powered by Code Help Pro

Por favor, permite que se muestren anuncios en nuestro sitio web

Querido lector,

Esperamos que estés disfrutando de nuestro contenido. Entendemos la importancia de la experiencia sin interrupciones, pero también queremos asegurarnos de que podamos seguir brindándote contenido de alta calidad de forma gratuita. Desactivar tu bloqueador de anuncios en nuestro sitio nos ayuda enormemente a lograrlo.

¡Gracias por tu comprensión y apoyo!