Biblioteca Snowpark Checkpoints: coletores

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 números (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 (padrão) e DATAFRAME.

    • output_path: (opcional) o caminho para o arquivo onde o ponto de verificação está salvo

      O valor padrão é o diretório de trabalho atual.

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

  • Um carimbo de data/hora de quando o ponto de coleta começou

  • 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 (consulte as tabelas a seguir). Para qualquer coluna, independentemente de seu tipo, os dados personalizados coletados incluem 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)

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

Data

Valor mínimo; valor máximo; Formato da data (%Y-%m-%d)

DayTimeIntervalType e YearMonthIntervalType

Valor mínimo; valor máximo

Carimbo de data/hora

Valor mínimo; valor máximo; formato da data (%Y-%m-%dH:%M:%S)

Carimbo de data/hora ntz

Valor mínimo; valor máximo; formato da data (%Y-%m-%dT%H:%M:%S%z)

Cadeia de caracteres

Valor do comprimento mínimo; 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

Valor mínimo; valor máximo; valor médio; precisão decimal

Matriz

Tipo do valor; se permitido, nulo como elemento; proporção de valores nulos; tamanho máximo da matriz; tamanho mínimo da matriz; tamanho médio das matrizes; se todas as matrizes têm o mesmo tamanho

Binário

Tamanho máximo; tamanho mínimo; tamanho médio; se todos os elementos têm o mesmo tamanho

Mapa

Tipo da chave; tipo do valor; se permitido, nulo como valor; proporção de valores nulos; tamanho máximo do mapa; tamanho mínimo do mapa; tamanho médio do mapa; se todos os mapas têm 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.

Precisão decimal; valor médio; 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:

  • 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 verificações das colunas com base no tipo PySpark. É um objeto DataFrameSchema de Pandera.

  • 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 trabalhar com um subconjunto de dados em vez de todo PySpark DataFrame, você pode definir o parâmetro de amostra na função de coleta como um valor entre 0,0 e 1,0.

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.