¿Qué es la API DataFrame de Spark?

Apache Spark es un motor de procesamiento distribuido diseñado para procesar datos estructurados, semiestructurados y sin estructurar a escala. Para interactuar con el motor y definir operaciones de datos distribuidas, los desarrolladores utilizan la API de Spark.


La API DataFrame de Spark es el núcleo del desarrollo moderno de Spark. Un DataFrame organiza y procesa datos distribuidos en columnas con nombre, de forma similar a una tabla de una base de datos relacional o una hoja de cálculo. Proporciona una interfaz declarativa y estructurada para analizar conjuntos de datos masivos y, al mismo tiempo, optimiza automáticamente la ejecución física en segundo plano.

Arquitectura y ejecución de la API de Spark

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


  • Controlador: el coordinador central de la aplicación Spark. Lee tu código, traduce las operaciones declarativas en planes de ejecución lógicos y programa tareas en los nodos de trabajador.
  • Gestor de clústeres: el asignador de recursos (como Kubernetes o gestores de recursos independientes) que aprovisiona recursos de CPU, memoria y red 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 los resultados o los escriben en el almacenamiento.
  • DAGs, stages y tareas: Spark no ejecuta las 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 "stages", que se dividen por límites de agrupamiento de datos por clave, y desglosa esas stages en tareas individuales distribuidas a los ejecutores para su ejecución en paralelo.

¿Qué diferencia hay entre los RDDs y los DataFrames de Spark?

A la hora de diseñar flujos de procesamiento de datos distribuidos, los desarrolladores eligen entre dos interfaces de programación principales:


  • RDD (conjunto de datos distribuido resiliente) de Spark: la API de Spark original de bajo nivel. Representa una colección inmutable y tolerante a fallos de objetos de JVM distribuidos en un clúster. Como los RDDs contienen objetos 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 provocar una sobrecarga significativa de la recolección de elementos no utilizados y una serialización lenta.
  • DataFrame de Spark: 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 RDDs?

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

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

La API DataFrame de Spark simplifica las tareas de procesamiento, limpieza y preparación de grandes volúmenes de datos, que requieren un uso intensivo de recursos de computación.


  • Ingenieros de datos: los ingenieros usan la API DataFrame para crear flujos de procesamiento de datos resilientes y con tolerancia a fallos. Extraen datos en bruto, 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 al día y, al mismo tiempo, minimizar la complejidad del código y la sobrecarga de mantenimiento.
  • Científicos de datos: los científicos de datos usan la API DataFrame para explorar y preparar conjuntos de datos masivos que superan los límites de memoria de una sola máquina. Al distribuir las particiones de datos entre los nodos de trabajador, pueden ejecutar análisis de datos exploratorios, limpiar valores nulos y generar funciones a escala, lo que reduce el tiempo de obtención de información valiosa.

Bibliotecas principales basadas en la API DataFrame

La API 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 de SQL ANSI directamente en conjuntos de datos de Spark. Puedes consultar DataFrames como vistas temporales, combinando de forma fluida código declarativo de Python o Scala con consultas de SQL estándar.
  • Structured Streaming: este motor procesa flujos continuos de datos en tiempo real. Utiliza los mismos comandos de la API DataFrame que el procesamiento por lotes estático, gestionando automáticamente el microprocesamiento por lotes, la tolerancia a fallos y la gestión de estados.
  • MLlib la biblioteca de aprendizaje automático distribuido de Spark utiliza DataFrames para gestionar 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.

Ventajas de la API DataFrame de Spark

Optimización declarativa

Los DataFrames utilizan un optimizador de consultas integrado: el optimizador de Catalyst. Cuando escribes código de DataFrame, el optimizador reescribe automáticamente el plan de ejecución físico aplicando la inserción de filtros, la poda de proyecciones y la reordenación de uniones para que se ejecute lo más rápido posible sin necesidad de realizar ajustes manuales.

Flexibilidad de lenguajes

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

Gestión eficiente de la memoria

Los DataFrames utilizan el motor de ejecución Tungsten para almacenar datos en un formato binario muy comprimido y fuera del montículo. 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 hilos de ejecución.

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

Tradicionalmente, para ejecutar Spark de código abierto se necesita configurar manualmente los clústeres, gestionar las versiones de software y realizar un complejo emparejamiento de redes. Google Cloud simplifica este proceso ofreciendo Managed Service for Apache Spark, que transforma la ejecución distribuida en una plataforma de datos totalmente gestionada y lista para el ámbito empresarial.


Los equipos de datos ejecutan cargas de trabajo de DataFrame de Spark en Google Cloud con las siguientes funciones:


  • Despliegue de clústeres gestionados y sin servidor: 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 servidor para enviar tareas por lotes directamente (pagando solo por los segundos exactos de tiempo de ejecución, ya que los recursos se escalan automáticamente) o desplegar clústeres gestionados persistentes y altamente personalizables para cargas de trabajo continuas.
  • Conectividad optimizada con BigQuery: el conector Spark-BigQuery evita las transiciones orientadas a filas de la JVM consumiendo datos de BigQuery directamente en el formato nativo de Apache Arrow. Los científicos de datos también pueden usar una interfaz de cuaderno integrada para ejecutar código de DataFrame de PySpark y consultas de SQL en el mismo conjunto de datos gobernado sin cambiar de entorno.
  • Ejecución nativa de C++ vectorizada: al ejecutar cargas de trabajo de Spark en Google Cloud, puedes habilitar Lightning Engine para tus lotes sin servidor o clústeres gestionados. Este motor de ejecución de consultas nativo de C++ compila planes de consultas físicas directamente en instrucciones nativas mediante Velox y Gluten. Al evitar el modelo de iterador Volcano de la JVM y los cuellos de botella generados por la recolección de elementos no utilizados, acelera tus cargas de trabajo de DataFrame y Spark SQL hasta 4,9 veces sin necesidad de cambiar el código.


Ve un paso más allá

Empieza a crear en Google Cloud con 300 USD en crédito gratis y más de 20 productos Always Free.

Google Cloud