PySpark en Azure Databricks
Azure Databricks se basa en Apache Spark, un motor de análisis unificado para macrodatos y aprendizaje automático. PySpark le ayuda a interactuar con Apache Spark mediante el lenguaje de programación Python, que es flexible, fácil de aprender, implementar y mantener. También proporciona muchas opciones para la visualización de datos en Databricks. PySpark combina la eficacia de Python y Apache Spark.
En este artículo se proporciona información general sobre los aspectos básicos de PySpark en Databricks.
Introducción a los conceptos de Spark
Es importante comprender los conceptos clave de Apache Spark antes de profundizar en el uso de PySpark.
DataFrames
DataFrames son los objetos principales de Apache Spark. DataFrame es un conjunto de datos organizado en columnas con nombre. Puede pensar en un DataFrame como una hoja de cálculo o una tabla SQL, una estructura de datos con etiqueta bidimensional de una serie de registros (similar a las filas de una tabla) y columnas de diferentes tipos. Los DataFrames proporcionan un amplio conjunto de funciones (por ejemplo, seleccionar columnas, filtrar, combinar y agregar) que permiten realizar tareas comunes de manipulación y análisis de datos de forma eficaz.
Algunos elementos importantes de DataFrame incluyen:
- Esquema: un esquema define los nombres de columna y los tipos de un DataFrame. Los formatos de datos tienen una semántica diferente para la definición y aplicación del esquema. Algunos orígenes de datos proporcionan información de esquema, mientras que otros se basan en la definición de esquema manual o permiten la inferencia de esquemas. Los usuarios pueden definir esquemas manualmente o los esquemas se pueden leer desde un origen de datos.
- Filas: Spark representa los registros de un DataFrame como objetos
Row
. Aunque los formatos de datos subyacentes, como Delta Lake, usan columnas para almacenar datos, para optimizar las memorias caché de Spark y los datos aleatorios mediante filas. - Columnas: las columnas de Spark son similares a las columnas de una hoja de cálculo y pueden representar un tipo simple, como una cadena o un entero, pero también tipos complejos como matriz, mapa o null. Puede escribir consultas que seleccionen, manipulen o quiten columnas de un origen de datos. Los orígenes de datos posibles incluyen tablas, vistas, archivos u otros DataFrames. Las columnas nunca se quitan de un conjunto de datos o un DataFrame, simplemente se omiten de los resultados a través de transformaciones
.drop
u omisión en instruccionesselect
.
Procesamiento de datos
Apache Spark usa la evaluación diferida para procesar transformaciones y acciones definidas con DataFrames. Estos conceptos son fundamentales para comprender el procesamiento de datos con Spark.
Transformaciones: en Spark se expresa la lógica de procesamiento como transformaciones, que son instrucciones para cargar y manipular datos mediante DataFrames. Las transformaciones comunes incluyen la lectura de datos, combinaciones, agregaciones y conversión de tipos. Para obtener información sobre las transformaciones en Azure Databricks, consulte Transformación de datos.
Evaluación diferida: Spark optimiza el procesamiento de datos mediante la identificación del plan físico más eficaz para evaluar la lógica especificada por las transformaciones. Sin embargo, Spark no actúa en las transformaciones hasta que se llama a las acciones. En lugar de evaluar cada transformación en el orden exacto especificado, Spark espera hasta que una acción desencadena el cálculo en todas las transformaciones. Esto se conoce como evaluación diferida o carga diferida, lo que permite encadenar varias operaciones porque Spark controla su ejecución de forma diferida, en lugar de ejecutarlas inmediatamente cuando se definen.
Nota:
La evaluación diferida significa que los DataFrames almacenan consultas lógicas como un conjunto de instrucciones en un origen de datos en lugar de un resultado en memoria. Esto varía drásticamente de la ejecución diligente, que es el modelo que usan los DataFrames de Pandas.
Acciones: las acciones indican a Spark que calcule un resultado de una serie de transformaciones en uno o varios DataFrames. Las operaciones de acción devuelven un valor y pueden ser cualquiera de las siguientes:
- Acciones para generar datos en la consola o en el editor, como
display
oshow
- Acciones para recopilar datos (devuelve objetos
Row
), comotake(n)
, yfirst
ohead
- Acciones para escribir en orígenes de datos, como
saveAsTable
- Agregaciones que desencadenan un cálculo, como
count
Importante
En las canalizaciones de datos de producción, escribir datos suele ser la única acción que debe estar presente. Todas las demás acciones interrumpen la optimización de consultas y pueden provocar cuellos de botella.
¿Qué significa que los DataFrames son inmutables?
Los DataFrames son una colección de transformaciones y acciones que se definen en uno o varios orígenes de datos, pero en última instancia Apache Spark resuelve las consultas de nuevo en los orígenes de datos originales, por lo que los datos en sí no se cambian y no se cambia ningún DataFrames. En otras palabras, los DataFrames son inmutables. Debido a esto, después de realizar transformaciones, se devuelve un nuevo DataFrame que debe guardarse en una variable para acceder a ella en operaciones posteriores. Si desea evaluar un paso intermedio de la transformación, llame a una acción.
API y bibliotecas
Como todas las API para Spark, PySpark incluye muchas API y bibliotecas que permiten y admiten potentes funcionalidades, entre las que se incluyen:
- Procesamiento de datos estructurados con consultas relacionales con Spark SQL y DataFrames. Spark SQL permite mezclar consultas SQL con programas de Spark. Con DataFrames de Spark, puede leer, escribir, transformar y analizar datos de forma eficaz mediante Python y SQL, lo que significa que siempre está aprovechando toda la potencia de Spark. Consulte Introducción a PySpark.
- Procesamiento escalable de flujos con Structured Streaming. Puede expresar un cálculo de streaming de la misma forma que expresaría un cálculo por lotes sobre datos estáticos y el motor Spark SQL lo ejecuta de forma incremental y continua a medida que siguen llegando los datos de streaming. Consulte Información general de Structured Streaming.
- Estructuras de datos de Pandas y herramientas de análisis de datos que funcionan en Apache Spark con la API de Pandas en Spark. La API de Pandas en Spark le permite escalar su carga de trabajo de Pandas a cualquier tamaño ejecutándola distribuida en varios nodos, con un único código base que funciona con Pandas (pruebas, conjuntos de datos más pequeños) y con Spark (producción, conjuntos de datos distribuidos). Consulte Introducción a la API de Pandas en Spark.
- Algoritmos de aprendizaje automático con Machine Learning (MLLib). MLlib es una biblioteca de aprendizaje automático escalable basada en Spark que proporciona un conjunto uniforme de API que ayudan a los usuarios a crear y optimizar canalizaciones prácticas de aprendizaje automático. Consulte Introducción a la biblioteca de Machine Learning.
- Grafos y cálculo paralelo de grafos con GraphX. GraphX presenta un nuevo multigrafo dirigido con propiedades asociadas a cada vértice y borde, y expone operadores de cálculo de grafos, algoritmos y generadores para simplificar las tareas de análisis de grafos. Consulte Introducción a GraphX.
Tutoriales de Spark
Para ver ejemplos de uso de PySpark en Databricks, consulte los siguientes artículos:
La documentación de Apache Spark también tiene guías de inicio rápido y guías para aprender Spark, incluidas las siguientes:
- Inicio rápido de DataFrames de PySpark
- Introducción a Spark SQL
- Guía de programación de Structured Streaming
- Inicio rápido de la API de Pandas en Spark
- Guía de programación de la biblioteca de Machine Learning
Referencia de PySpark
Azure Databricks mantiene su propia versión de las API de PySpark y la referencia correspondiente, que se pueden encontrar en estas secciones: