Visualiza DataFrames de Spark en notebooks

Puedes explorar de forma interactiva los DataFrames de PySpark en notebooks de Jupyter, incluido Google Cloud Data Agent Kit (DAK), con el paquete de Python google-colabsqlviz con Managed Service para Apache Spark. Basado en anywidget y con la tecnología del motor de gráficos de Data Studio, google-colabsqlviz renderiza una visualización interactiva dentro del resultado de la celda del notebook sin código de trazado.

Cuando pasas un DataFrame a google-colabsqlviz, puedes cambiar entre las vistas de gráfico y de tabla de datos, configurar dimensiones y métricas, aplicar agregaciones, ordenar o filtrar datos de forma interactiva, y exportar datos de gráficos filtrados o agregados a un DataFrame nuevo:

  • Compatibilidad con DataFrames de varios motores: Visualiza objetos pyspark.sql.DataFrame (incluidos los DataFrames de Spark Connect), bigframes.pandas.DataFrame y pandas.DataFrame con una API.
  • Ejecución distribuida y en el kernel: Aunque el widget carga la IU de gráficos de Data Studio desde la CDN de Google, tus datos subyacentes no se envían a Data Studio. Todas las agregaciones y los filtros se ejecutan en tu kernel de Python o en tu sesión de Managed Service para Apache Spark, y los gráficos se renderizan de forma local en tu cliente de notebook.
  • Cero conflictos de entorno: Los motores distribuidos opcionales, como pyspark y bigframes, se detectan en el entorno de ejecución y no se actualizan ni reemplazan cuando instalas google-colabsqlviz.

Antes de comenzar

La renderización de DataFrames de PySpark en Spark Connect con google-colabsqlviz es compatible con las sesiones interactivas de Managed Service para Apache Spark con la versión del entorno de ejecución sin servidores 3.0 o posterior.

Sigue estas instrucciones para crear un notebook en Visual Studio Code (VS Code) con Data Agent Kit o usa otro entorno de notebook de Jupyter compatible, como JupyterLab:

  1. Establece y configura el Kit de agentes de datos (DAK):
    1. Instala la extensión Data Agent Kit.
    2. Configura el Data Agent Kit.
    3. Asegúrate de tener los roles de Identity and Access Management (IAM) necesarios.
  2. Crea un notebook:
    1. En la barra de actividades de VS Code, haz clic en Data Agent Kit, expande Apache Spark y selecciona + Nuevo notebook de Spark.
    2. En Seleccionar tipo de kernel, haz clic en Kernel local.
    3. Para seleccionar una plantilla de entorno de ejecución sin servidores, haz clic en el nombre de una plantilla de entorno de ejecución de la lista.
    4. En la barra de herramientas del notebook, haz clic en Seleccionar kernel, haz clic en Entornos de Python… y, luego, elige tu entorno de Python local.
  3. Para instalar los paquetes de Python Spark Connect y google-colabsqlviz necesarios en tu entorno local, ejecuta el siguiente comando en una celda del notebook o en una terminal local:

    Celda del notebook

    %pip install -U 'google-cloud-spark-connect[interactive,client]'
    

    Terminal local

    pip install -U 'google-cloud-spark-connect[interactive,client]'
    

Carga y visualiza un conjunto de datos

Después de iniciar un ManagedSparkSession y cargar un conjunto de datos en un pyspark.sql.DataFrame, pasa el DataFrame a la función explore_dataframe para renderizar la visualización interactiva. En el siguiente ejemplo, se establece una conexión con una sesión sin servidores y se carga el conjunto de datos de Palmer Penguins (`lakehouse-public-data`.ml_datasets.penguins) desde los conjuntos de datos públicos de Lakehouse:

# Importing managed_spark_connect automatically imports explore_dataframe
from google.cloud.managed_spark_connect import ManagedSparkSession

spark = (
    ManagedSparkSession.builder.projectId("PROJECT_ID")
    .location("REGION")
    .getOrCreate()
)

df = spark.read.table("`lakehouse-public-data`.ml_datasets.penguins")

explore_dataframe(df)

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • REGION: Es la región de Managed Service para Apache Spark de tu sesión (por ejemplo, us-central1).

Cuando ejecutas la celda, google-colabsqlviz inspecciona el esquema del DataFrame y renderiza un widget de visualización interactivo en el área de salida de la celda con una visualización predeterminada. Para el conjunto de datos penguins, renderiza un diagrama de dispersión del promedio de flipper_length_mm y body_mass_g agrupados por species.

En la barra de herramientas del widget, haz clic en Datos para inspeccionar las filas del DataFrame subyacente en una tabla paginada. Selecciona Modo de división para ver el gráfico y la tabla de datos subyacente juntos. Haz clic en Gráfico para volver a la vista de gráfico.

Vista predeterminada del diagrama de dispersión en el widget de visualización que muestra la longitud promedio de las aletas y la masa corporal por especie de pingüino.

Explora y personaliza gráficos

Puedes personalizar los tipos de gráficos, las dimensiones, las métricas, las agregaciones, el orden y los filtros en la interfaz del widget, y exportar los datos resultantes de vuelta a un DataFrame en tu notebook.

  1. Selecciona un tipo de gráfico: En el panel de configuración, haz clic en el menú de tipo de gráfico y selecciona un tipo de gráfico, como Gráfico de barras verticales. Para obtener una lista completa de los tipos de gráficos admitidos, consulta Tipos de gráficos en Data Studio.
  2. Configura dimensiones y métricas: En la pestaña Configuración, configura los campos para el DataFrame de penguins:
    • Mantén la Dimensión establecida en species para agrupar los registros por especie de pingüino.
    • En Métrica: Eje Y, establece la métrica en body_mass_g con la agregación establecida en AVG (Promedio) para calcular la masa corporal promedio en gramos de cada especie.
    • Haz clic en Agregar dimensión y selecciona island o sex para desglosar el gráfico en varias dimensiones, o cambia la agregación de métricas de AVG a MAX o SUM.
  3. Ordena y filtra la visualización:
    • En la pestaña Configuración, en Ordenar, selecciona body_mass_g con la agregación AVG y selecciona Descendente para clasificar las especies por masa corporal promedio más alta.
    • Haz clic en Agregar filtro en la barra de herramientas del widget para filtrar los registros por valores de campo (por ejemplo, body_mass_g mayor o igual que 4000) o haz clic en Crear DataFrame de salida en la parte inferior del widget para exportar los datos del gráfico agregados o los datos filtrados a una nueva celda de DataFrame. Cuando actualizas una propiedad o un filtro de gráfico, google-colabsqlviz vuelve a calcular la consulta en tu DataFrame y actualiza la visualización:

Gráfico de barras verticales y panel de configuración en el widget de visualización
que muestra la masa corporal promedio por especie de pingüino ordenada de forma
descendente.

Para obtener más información sobre cómo configurar las propiedades de los gráficos, las agregaciones y los controles interactivos en la interfaz de gráficos incorporada, consulta la siguiente documentación:

Configura la ejecución para DataFrames grandes

Cuando pasas un pyspark.sql.DataFrame a explore_dataframe(df), google-colabsqlviz elige entre dos estrategias de ejecución según el tamaño del DataFrame:

  • Materialización en memoria (predeterminada para DataFrames más pequeños): Si el DataFrame se estima en 256 MiB o menos y contiene, como máximo, 5,000,000 de filas, google-colabsqlviz recopila el DataFrame en la memoria del kernel una vez. Los cambios posteriores en el tipo de gráfico, las agregaciones, el ordenamiento y el filtrado se ejecutan en la memoria con una latencia mínima y no activan trabajos de Spark nuevos.
  • Pushdown de Spark distribuido (la opción predeterminada para DataFrames más grandes): Si el DataFrame supera el presupuesto de bytes o filas, google-colabsqlviz mantiene el DataFrame diferido y traduce cada consulta, filtro, ordenamiento y solicitud de paginación del gráfico en una operación de PySpark ejecutada en tu sesión sin servidores de Managed Service para Apache Spark. Este enfoque puede agregar latencia adicional, pero te permite visualizar DataFrames mucho más grandes.

Puedes ajustar o inhabilitar el umbral de materialización en la memoria configurando la variable de entorno COLABSQLVIZ_PYSPARK_EAGER_MAX_BYTES antes de llamar a explore_dataframe(df):

import os

# Importing managed_spark_connect automatically imports explore_dataframe
from google.cloud.managed_spark_connect import ManagedSparkSession

# Set to "0" to disable upfront collection and push all chart queries to Spark,
# or set a custom byte limit, such as str(64 * 1024 * 1024) for 64 MiB.
os.environ["COLABSQLVIZ_PYSPARK_EAGER_MAX_BYTES"] = "0"

explore_dataframe(df)

¿Qué sigue?