Visualizar DataFrames do Spark em notebooks

É possível analisar interativamente os DataFrames do PySpark em notebooks do Jupyter, incluindo o Google Cloud Data Agent Kit (DAK), usando o pacote Python google-colabsqlviz com o Serviço Gerenciado para Apache Spark. Criado no anywidget e com tecnologia do mecanismo de gráficos do Data Studio, o google-colabsqlviz renderiza uma visualização interativa dentro da saída da célula do notebook sem código de plotagem.

Ao transmitir um DataFrame para google-colabsqlviz, é possível alternar entre as visualizações de gráfico e tabela de dados, configurar dimensões e métricas, aplicar agregações, classificar ou filtrar dados de forma interativa e exportar dados de gráfico filtrados ou agregados para um novo DataFrame:

  • Suporte a DataFrames de vários mecanismos: visualize objetos pyspark.sql.DataFrame (incluindo DataFrames do Spark Connect), bigframes.pandas.DataFrame e pandas.DataFrame usando uma API.
  • Execução no kernel e distribuída: embora o widget carregue a UI de gráficos do Data Studio da CDN do Google, os dados subjacentes não são enviados ao Data Studio. Todas as agregações e filtros são executados no kernel do Python ou na sessão do Serviço Gerenciado para Apache Spark, e os gráficos são renderizados localmente no cliente do notebook.
  • Zero conflitos de ambiente: mecanismos distribuídos opcionais, como pyspark e bigframes, são detectados no ambiente de execução e não são atualizados ou substituídos quando você instala o google-colabsqlviz.

Antes de começar

A renderização de DataFrames do PySpark no Spark Connect com google-colabsqlviz é compatível com as sessões interativas do Serviço Gerenciado para Apache Spark com a versão do ambiente de execução sem servidor 3.0 ou mais recente.

Siga estas instruções para criar um notebook no Visual Studio Code (VS Code) com o Data Agent Kit ou use outro ambiente de notebook do Jupyter compatível, como o JupyterLab:

  1. Configure o Kit de Agente de Dados (DAK):
    1. Instale a extensão do Data Agent Kit.
    2. Configure o Data Agent Kit.
    3. Verifique se você tem os papéis necessários do Identity and Access Management (IAM).
  2. Crie um notebook:
    1. Na barra de atividades do VS Code, clique em Data Agent Kit, expanda Apache Spark e selecione + Novo notebook do Spark.
    2. Em Selecionar tipo de kernel, clique em Kernel local.
    3. Para Selecionar um modelo de ambiente de execução sem servidor, clique no nome de um modelo de ambiente de execução listado.
    4. Na barra de ferramentas do notebook, clique em Selecionar kernel, em Ambientes Python... e escolha o ambiente Python local.
  3. Para instalar os pacotes necessários do Spark Connect e do google-colabsqlviz do Python no ambiente local, execute o seguinte comando em uma célula do notebook ou no terminal local:

    Célula do notebook

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

    Terminal local

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

Carregar e visualizar um conjunto de dados

Depois de iniciar um ManagedSparkSession e carregar um conjunto de dados em um pyspark.sql.DataFrame, transmita o DataFrame para a função explore_dataframe para renderizar a visualização interativa. O exemplo a seguir se conecta a uma sessão sem servidor e carrega o conjunto de dados Palmer Penguins (`lakehouse-public-data`.ml_datasets.penguins) dos conjuntos de dados públicos do 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)

Substitua:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • REGION: a região do Serviço Gerenciado para Apache Spark da sua sessão (por exemplo, us-central1).

Quando você executa a célula, o google-colabsqlviz inspeciona o esquema do DataFrame e renderiza um widget de visualização interativo na área de saída da célula com uma visualização padrão. Para o conjunto de dados penguins, ele renderiza um gráfico de dispersão da média de flipper_length_mm e body_mass_g agrupados por species.

Na barra de ferramentas do widget, clique em Dados para inspecionar as linhas do DataFrame subjacente em uma tabela paginada. Selecione Modo de divisão para ver o gráfico e a tabela de dados juntos. Clique em Gráfico para voltar à visualização de gráfico.

Visualização padrão do gráfico de dispersão no widget de visualização mostrando a média
do comprimento da nadadeira e da massa corporal por espécie de
pinguim.

Analisar e personalizar gráficos

É possível personalizar tipos de gráficos, dimensões, métricas, agregações, classificação e filtros na interface do widget e exportar os dados resultantes de volta para um DataFrame no notebook.

  1. Selecione um tipo de gráfico: no painel de configurações, clique no menu de tipo de gráfico e selecione uma opção, como Gráfico de barras verticais. Para uma lista completa dos tipos de gráficos compatíveis, consulte Tipos de gráficos no Data Studio.
  2. Configurar dimensões e métricas: na guia Configuração, configure os campos do DataFrame penguins:
    • Mantenha a Dimensão definida como species para agrupar os registros por espécie de pinguim.
    • Em Métrica - Eixo Y, defina a métrica como body_mass_g com a agregação definida como AVG (Média) para calcular a massa corporal média em gramas de cada espécie.
    • Clique em Adicionar dimensão e selecione island ou sex para detalhar o gráfico em várias dimensões ou mude a agregação de métricas de AVG para MAX ou SUM.
  3. Classificar e filtrar a visualização:
    • Na guia Configuração, em Classificar, selecione body_mass_g com a agregação AVG e selecione Decrescente para classificar as espécies pela maior massa corporal média.
    • Clique em Adicionar filtro na barra de ferramentas do widget para filtrar registros por valores de campo (por exemplo, body_mass_g maior ou igual a 4000) ou clique em Criar DataFrame de saída na parte de baixo do widget para exportar os dados agregados do gráfico ou os dados filtrados para uma nova célula do DataFrame. Quando você atualiza uma propriedade ou um filtro de gráfico, o google-colabsqlviz recalcula a consulta no DataFrame e atualiza a visualização:

Gráfico de barras verticais e painel de configuração no widget de visualização
mostrando a massa corporal média por espécie de pinguim classificada em ordem
decrescente.

Para mais informações sobre como configurar propriedades de gráficos, agregações e controles interativos na interface de gráficos incorporados, consulte a seguinte documentação:

Configurar a execução para DataFrames grandes

Quando você transmite um pyspark.sql.DataFrame para explore_dataframe(df), o google-colabsqlviz escolhe entre duas estratégias de execução com base no tamanho do DataFrame:

  • Materialização na memória (padrão para DataFrames menores): se o DataFrame for estimado em 256 MiB ou menos e tiver no máximo 5.000.000 linhas, o google-colabsqlviz vai coletar o DataFrame na memória do kernel uma vez. As mudanças subsequentes no tipo de gráfico, as agregações, a classificação e a filtragem são executadas na memória com latência mínima e não acionam novos jobs do Spark.
  • Pushdown distribuído do Spark (o padrão para DataFrames maiores): se o DataFrame exceder o orçamento de bytes ou linhas, o google-colabsqlviz vai manter o DataFrame lento e traduzir cada consulta de gráfico, filtro, classificação e solicitação de paginação em uma operação do PySpark executada na sua sessão sem servidor do Serviço Gerenciado para Apache Spark. Essa abordagem pode adicionar latência, mas permite visualizar DataFrames muito maiores.

É possível ajustar ou desativar o limite de materialização na memória definindo a variável de ambiente COLABSQLVIZ_PYSPARK_EAGER_MAX_BYTES antes de chamar 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)

A seguir