Biblioteca Snowpark Checkpoints: coletores

O pacote Python do Snowpark Checkpoints oferece uma série de funcionalidades para dar suporte à validação de cargas de trabalho migradas. Esta seção descreve os principais recursos e funcionalidades incluídos no pacote, juntamente com orientações sobre como usá-los de forma eficaz.

Coleta de informações sobre o seu código PySpark

O pacote snowpark-checkpoints-collectors oferece uma função para extrair informações do site PySpark DataFrames. Em seguida, podemos usar esses dados para validar com o Snowpark DataFrames convertido para garantir a equivalência comportamental.

Use a função a seguir para inserir um novo ponto de coleta de ponto de verificação:

Assinatura da função:

def collect_dataframe_checkpoint(df: SparkDataFrame,
  checkpoint_name: str,
  sample: Optional[float],
  mode: Optional[CheckpointMode],
  output_path: Optional[str]) -> None:
Copy

Parâmetros de função:

  • df: o PySpark DataFrame.

  • checkpoint_name: o nome do ponto de verificação. Começa com uma letra (A-Z, a-z) ou um sublinhado (_) e contém apenas letras, sublinhados e dígitos decimais (0-9).

  • sample: (opcional) o tamanho da amostra. O valor padrão é 1,0 (PySpark DataFrame inteiro) em um intervalo de 0 a 1,0.

  • mode: (opcional) o modo de execução. As opções são SCHEMA e DATAFRAME. O valor padrão é SCHEMA.

  • output_path: (opcional) o caminho de saída para salvar o ponto de verificação. O valor padrão é o diretório de trabalho atual.

O processo de coleta gera um arquivo de saída, chamado checkpoint_collection_result.json, com as informações sobre o resultado de cada ponto de coleta. É um arquivo JSON e contém as seguintes informações:

  • Um carimbo de data/hora em que o ponto de coleta foi iniciado.

  • O caminho relativo do arquivo onde está o ponto de coleta.

  • A linha de código do arquivo onde está o ponto de coleta.

  • O nome do ponto de verificação do ponto de coleta.

  • O resultado do ponto de coleta (falha ou aprovação).

Modo de dados coletados de inferência de esquema (esquema)

Esse é o modo padrão, que utiliza a inferência de esquema do Pandera para obter os metadados e as verificações que serão avaliadas para o DataFrame especificado. Esse modo também coleta dados personalizados das colunas do DataFrame com base no tipo PySpark.

Os dados e verificações da coluna são coletados com base no tipo PySpark da coluna (veja as tabelas abaixo). Para qualquer coluna, independentemente de seu tipo, os dados personalizados coletados incluirão o nome da coluna, o tipo da coluna, anulável, a contagem de linhas, a contagem de linhas não nulas e a contagem de linhas nulas.

Os dados personalizados são coletados com base no tipo PySpark da coluna

Tipo de coluna

Dados personalizados coletados

Numérico (byte, short, integer, long, float e double)

O valor mínimo. O valor máximo. O valor médio. A precisão decimal (no caso do tipo inteiro, o valor é zero). O desvio padrão.

Data

O valor mínimo. O valor máximo. O formato da data: %Y-%m-%d

DayTimeIntervalType e YearMonthIntervalType

O valor mínimo. O valor máximo.

Carimbo de data/hora

O valor mínimo. O valor máximo. O formato da data: %Y-%m-%dH:%M:%S

Carimbo de data/hora ntz

O valor mínimo. O valor máximo. O formato da data: %Y-%m-%dT%H:%M:%S%z

Cadeia de caracteres

O valor do comprimento mínimo. O valor do comprimento máximo.

Char

PySpark trata qualquer literal como um tipo de cadeia de caracteres, portanto, char não é um tipo válido.

Varchar

PySpark trata qualquer literal como um tipo de cadeia de caracteres, portanto, Varchar não é um tipo válido.

Decimal

O valor mínimo. O valor máximo. O valor médio. A precisão decimal.

Matriz

O tipo do valor. Se permitido, nulo como um elemento. A proporção de valores nulos. O tamanho máximo da matriz. O tamanho mínimo da matriz. O tamanho médio das matrizes. Se todas as matrizes tiverem o mesmo tamanho.

Binário

O tamanho máximo. O tamanho mínimo. O tamanho médio. Se todos os elementos tiverem o mesmo tamanho.

Mapa

O tipo da chave. O tipo do valor. Se permitido, nulo como um valor. A proporção de valores nulos. O tamanho máximo do mapa. O tamanho mínimo do mapa. O tamanho médio do mapa. Se todos os mapas tiverem o mesmo tamanho.

Nulo

NullType representa Nenhum, porque os dados do tipo não podem ser determinados; portanto, não é possível obter informações desse tipo.

Estrutura

Os metadados da estrutura são para cada structField: name, type, nullable, rows count, rows not null count e rows null count. É uma matriz.

Ele também define um conjunto de verificações de validação predefinidas para cada tipo de dados detalhado na tabela a seguir:

As verificações são coletadas com base no tipo de coluna

Tipo

Verificações Pandera

Verificações adicionais

Booliano

Cada valor é True ou False.

A contagem de valores True e False.

Numérico (byte, short, integer, long, float e double)

Cada valor está no intervalo do valor mínimo e do valor máximo.

A precisão decimal. O valor médio. O desvio padrão.

Data

N/A

Valores mínimos e máximos.

Carimbo de data/hora

Cada valor está no intervalo do valor mínimo e do valor máximo.

O formato do valor.

Carimbo de data/hora ntz

Cada valor está no intervalo do valor mínimo e do valor máximo.

O formato do valor.

Cadeia de caracteres

O comprimento de cada valor está no intervalo de comprimento mínimo e máximo.

Nenhum

Char

PySpark trata qualquer literal como um tipo de cadeia de caracteres, portanto, char não é um tipo válido.

Varchar

PySpark trata qualquer literal como um tipo de cadeia de caracteres, portanto, Varchar não é um tipo válido.

Decimal

N/A

N/A

Matriz

N/A

Nenhum

Binário

N/A

Nenhum

Mapa

N/A

Nenhum

Nulo

N/A

N/A

Estrutura

N/A

Nenhum

Esse modo permite que o usuário defina uma amostra de um DataFrame para coletar, mas é opcional. Por padrão, a coleção funciona com todo o DataFrame. O tamanho da amostra deve representar estatisticamente a população.

O Pandera só pode inferir o esquema de um Pandas DataFrame, o que implica que o PySpark DataFrame deve ser convertido em um Pandas DataFrame, o que pode afetar as resoluções de tipo das colunas. Em particular, o Pandera infere os seguintes tipos de PySpark como tipos de objeto: string, array, map, null, struct e binary.

A saída desse modo é um arquivo JSON para cada DataFrame coletado, em que o nome do arquivo é o mesmo do ponto de verificação. Esse arquivo contém informações relacionadas ao esquema e tem duas seções:

  1. A seção de esquema do Pandera contém os dados inferidos pelo Pandera, como nome, tipo (Pandas), se a coluna permite ou não valores nulos e outras informações para cada coluna, além de fazer verificações da coluna com base no tipo PySpark. É um objeto DataFrameSchema de Pandera.

  2. A seção de dados personalizados é uma matriz dos dados personalizados coletados por cada coluna com base no tipo PySpark.

Nota

O pacote de coleta pode ter problemas de memória ao processar grandes PySpark DataFrames. Para resolver isso, você pode definir o parâmetro de amostra na função de coleta para um valor entre 0,0 e 1,0, a fim de trabalhar com um subconjunto dos dados em vez de todo o PySpark DataFrame.

Modo de dados coletados DataFrame (DataFrame)

Esse modo coleta os dados do PySpark DataFrame. Nesse caso, o mecanismo salva todos os dados do DataFrame fornecido no formato parquet. Usando a conexão padrão do Snowflake do usuário, ele tenta carregar os arquivos de parquet no estágio temporal do Snowflake e criar uma tabela com base nas informações do estágio. O nome do arquivo e da tabela são os mesmos do ponto de verificação.

A saída desse modo é um resultado de arquivo parquet do DataFrame salvo e uma tabela com os dados do DataFrame na conexão de configuração padrão do Snowflake.