¿Qué es la API de DataFrame de Spark?

Apache Spark es un motor de procesamiento distribuido diseñado para procesar datos estructurados, semiestructurados y no estructurados a gran escala. Para interactuar con el motor y definir operaciones de datos distribuidos, los desarrolladores usan la API de Spark.


En el centro del desarrollo moderno de Spark, se encuentra la API de DataFrame de Spark. Un DataFrame organiza y procesa datos distribuidos en columnas con nombre, de forma similar a una tabla en una base de datos relacional o una hoja de cálculo. Proporciona una interfaz estructurada y declarativa para analizar conjuntos de datos masivos, a la vez que optimiza automáticamente la ejecución física tras bambalinas.

Arquitectura y ejecución de la API de Spark

Para comprender cómo la API de Spark ejecuta tu código en una red distribuida, es importante entender los componentes básicos de su arquitectura de entorno de ejecución:


  • Controlador: Es el coordinador central de la aplicación de Spark. Lee tu código, traduce las operaciones declarativas en planes de ejecución lógicos y programa tareas en los nodos trabajadores.
  • Administrador de clústeres: El asignador de recursos (como Kubernetes o administradores de recursos independientes) que aprovisiona recursos de CPU, memoria y redes en todo el clúster.
  • Ejecutores: Las instancias de trabajador que se ejecutan en los nodos del clúster. Reciben instrucciones de tareas del controlador, ejecutan operaciones de procesamiento de datos de forma local en la memoria y devuelven resultados o los escriben en el almacenamiento.
  • DAG, etapas y tareas: Spark no ejecuta transformaciones de datos línea por línea. En su lugar, el controlador compila el código de tu DataFrame en un grafo acíclico dirigido (DAG) de operadores físicos. El controlador agrupa estos operadores en fases de ejecución amplias llamadas etapas, que se dividen por límites de redistribución de datos, y desglosa esas etapas en tareas individuales distribuidas a los ejecutores para su ejecución en paralelo.

¿Cuál es la diferencia entre los RDD y los DataFrames de Spark?

Cuando diseñan canalizaciones de datos distribuidas, los desarrolladores eligen entre dos interfaces de programación principales:


  • Spark RDD (conjuntos de datos resilientes y distribuidos): La API de Spark original de bajo nivel. Representa una colección inmutable y tolerante a errores de objetos de JVM distribuidos en un clúster. Debido a que los RDD contienen objetos de Java arbitrarios, el motor de ejecución no puede inspeccionar su estructura interna. Esto obliga a los desarrolladores a escribir y ajustar manualmente la lógica de transformación de bajo nivel, lo que suele generar una sobrecarga significativa de recolección de elementos no utilizados y una serialización lenta.
  • Spark DataFrame: El estándar moderno para el procesamiento de datos estructurados. Los DataFrames organizan los datos en filas y columnas definidas por un esquema estricto. Como el motor de ejecución comprende los tipos de datos y la estructura del conjunto de datos, puede optimizar automáticamente el código antes de ejecutarlo.

¿Por qué elegir DataFrames en lugar de RDD?

Para casi todos los casos de uso de ingeniería de datos y ciencia de datos, la API de DataFrame es la opción preferida. Los RDD se reservan para situaciones en las que debes manipular datos sin procesar y no estructurados (como archivos binarios o transmisiones de contenido multimedia) con objetos de Java personalizados. Los DataFrames requieren menos código, se ejecutan automáticamente más rápido y utilizan la administración de memoria binaria fuera del montón para evitar los cuellos de botella de la recolección de elementos no utilizados de la JVM.

Cómo los equipos de datos usan la API de Spark

La API de DataFrame de Spark simplifica las tareas de procesar, limpiar y preparar grandes volúmenes de datos, que requieren procesamiento intensivo.


  • Ingenieros de datos: Los ingenieros usan la API de DataFrame para crear canalizaciones de datos resilientes y tolerantes a errores. Extraen datos sin procesar, aplican esquemas, ejecutan transformaciones estructuradas y escriben tablas conformadas en data lakes o almacenes de datos en la nube. La sintaxis declarativa les permite procesar terabytes de datos diariamente, a la vez que minimiza la complejidad del código y la sobrecarga de mantenimiento.
  • Científicos de datos: Los científicos de datos usan la API de DataFrame para explorar y preparar conjuntos de datos masivos que superan los límites de memoria de una sola máquina. Cuando distribuyen particiones de datos entre nodos trabajadores, pueden ejecutar análisis de datos exploratorios, limpiar valores nulos y diseñar atributos a gran escala, lo que acelera el tiempo de obtención de estadísticas.

Bibliotecas principales creadas con la API de DataFrame

La API de DataFrame de Spark sirve como base programática para las bibliotecas de procesamiento avanzado de Spark:


  • Spark SQL: Este módulo te permite ejecutar consultas en ANSI SQL directamente en conjuntos de datos de Spark. Puedes consultar DataFrames como vistas temporales, lo que combina sin problemas el código declarativo de Python o Scala con consultas en SQL estándar.
  • Structured Streaming: Este motor procesa transmisiones continuas de datos en tiempo real. Usa los mismos comandos de la API de DataFrame que el procesamiento por lotes estático, lo que controla automáticamente los microlotes, la tolerancia a errores y la administración de estados.
  • MLlib: La biblioteca de aprendizaje automático distribuido de Spark usa DataFrames para administrar y preparar conjuntos de datos de entrenamiento, lo que proporciona algoritmos integrados y escalables para la clasificación, la regresión, el agrupamiento en clústeres y el filtrado colaborativo.

Beneficios de la API de DataFrame de Spark

Optimización declarativa

Los DataFrames usan un optimizador de consultas integrado llamado Catalyst Optimizer. Cuando escribes código de DataFrame, el optimizador reescribe automáticamente el plan de ejecución físico aplicando la reducción de filtros y proyecciones y el reordenamiento de uniones para que se ejecute lo más rápido posible sin ajustes manuales.

Flexibilidad de lenguajes

Ya sea que tu equipo escriba código en Python (PySpark), Scala, Java o R, la API de DataFrame garantiza un rendimiento idéntico. El plan de ejecución subyacente se compila y optimiza dentro de la misma capa de ejecución independiente de la JVM.

Administración eficiente de la memoria

DataFrame utiliza el motor de ejecución Tungsten para almacenar datos en un formato binario fuera del montón y altamente comprimido. Esto elimina la sobrecarga de creación de objetos de la JVM y evita que las pausas de recolección de elementos no utilizados congelen los subprocesos del ejecutor.

Cómo usar la API de DataFrame de Spark en Google Cloud

Ejecutar Spark de código abierto tradicionalmente requiere configuración manual de clústeres, administración de versiones de software y un intercambio de tráfico de red complejo. Google Cloud simplifica esto ofreciendo Managed Service para Apache Spark, que transforma la ejecución distribuida en una plataforma de datos completamente administrada y lista para empresas.


Los equipos de datos ejecutan cargas de trabajo de DataFrame de Spark en Google Cloud aprovechando las siguientes capacidades:


  • Implementación de clústeres sin servidores y administrados: Google Cloud te permite elegir el modelo de ejecución que se adapte a tus necesidades operativas. Puedes ejecutar código de DataFrame en modo sin servidores para enviar trabajos por lotes directamente, pagando solo por los segundos exactos de tiempo de ejecución a medida que los recursos se escalan automáticamente, o implementar clústeres administrados persistentes y altamente personalizables para cargas de trabajo continuas.
  • Conectividad optimizada de BigQuery: El conector spark-bigquery omite las transiciones orientadas a filas de JVM gracias a que consume datos de BigQuery directamente en el formato nativo de Apache Arrow. Los científicos de datos también pueden usar una interfaz de notebook integrada para ejecutar código de DataFrame de PySpark y consultas en SQL en el mismo conjunto de datos administrado sin cambiar de entorno.
  • Ejecución de C++ nativo vectorizado: Cuando ejecutas cargas de trabajo de Spark en Google Cloud, puedes habilitar Lightning Engine para tus lotes sin servidores o clústeres administrados. Este motor de ejecución de consultas nativo de C++ compila planes de consultas físicos directamente en instrucciones nativas con Velox y Gluten. Al omitir el modelo de iterador Volcano de JVM y los cuellos de botella de la recolección de elementos no utilizados, acelera tus cargas de trabajo de DataFrame y Spark SQL hasta 4.9 veces sin cambios en el código.


Da el siguiente paso

Comienza a desarrollar en Google Cloud con el crédito gratis de $300 y los más de 20 productos del nivel Siempre gratuito.

Google Cloud