Bibliothèque de points de contrôle Snowpark : collecteurs

Le paquet Python de points de contrôle Snowpark fournit une série de fonctionnalités pour prendre en charge la validation des charges de travail migrées. Cette section présente les fonctions et capacités clés incluses dans le paquet, ainsi que des conseils sur la manière de les utiliser efficacement.

Collecte d’informations sur votre code PySpark

Le paquet snowpark-checkpoints-collectors propose une fonction permettant d’extraire des informations des DataFrames PySpark. Nous pouvons ensuite utiliser ces données pour les comparer aux données converties des DataFrames Snowpark afin de garantir l’équivalence des comportements.

Utilisez la fonction suivante pour insérer un nouveau point de collecte des points de contrôle :

Signature de la fonction :

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

Paramètres de fonction :

  • df : le DataFrame PySpark.

  • checkpoint_name : le nom du point de contrôle. Commence par une lettre (A-Z, a-z) ou un trait de soulignement (_) et ne contient que des lettres, des traits de soulignement et des chiffres décimaux (0-9).

  • échantillon : (facultatif) la taille de l’échantillon. La valeur par défaut est 1.0 (DataFramePySpark) dans une plage de 0 à 1.0.

  • mode : (facultatif) le mode d’exécution. Les options sont SCHEMA et DATAFRAME. La valeur par défaut est SCHEMA.

  • output_path : (facultatif) le chemin de sortie pour enregistrer le point de contrôle. La valeur par défaut est le répertoire de travail actuel.

Le processus de collecte génère un fichier de sortie, appelé checkpoint_collection_result.json, contenant les informations relatives au résultat pour chaque point de collecte. Il s’agit d’un fichier JSON qui contient les informations suivantes :

  • Horodatage du début du point de collecte.

  • Le chemin relatif du fichier où se trouve le point de collecte.

  • La ligne de code du fichier où se trouve le point de collecte.

  • Nom du point de contrôle du point de collecte.

  • Le résultat du point de collecte (échec ou réussite).

Mode de collecte des données par inférence de schéma (schéma)

Il s’agit du mode par défaut, qui s’appuie sur l’inférence du schéma Pandera pour obtenir les métadonnées et les contrôles qui seront évalués pour le DataFrame spécifié. Ce mode permet également de collecter des données personnalisées dans les colonnes du DataFrame en fonction du type PySpark.

Les données et les contrôles de la colonne sont collectés en fonction du type PySpark de la colonne (voir les tables ci-dessous). Pour toute colonne, quel que soit son type, les données personnalisées collectées incluront le nom de la colonne, le type de la colonne, Null possible, le nombre de lignes, le nombre de lignes non nulles et le nombre de lignes nulles.

Les données personnalisées sont collectées en fonction du type de la colonne PySpark

Type de colonne

Données personnalisées collectées

Numérique (byte, short, integer, long, float et double)

La valeur minimale. La valeur maximale. La valeur moyenne. La précision décimale (dans le cas d’un type entier, la valeur est zéro). L’écart-type.

Date

La valeur minimale. La valeur maximale. Le format de la date : %Y-%m-%d

DayTimeIntervalType et YearMonthIntervalType

La valeur minimale. La valeur maximale.

Horodatage

La valeur minimale. La valeur maximale. Le format de la date : %Y-%m-%dH:%M:%S

Horodatage ntz

La valeur minimale. La valeur maximale. Le format de la date : %Y-%m-%dT%H:%M:%S%z

Chaîne

La valeur de la longueur minimale. La valeur de la longueur maximale.

Char

PySpark traite tout littéral comme un type de chaîne, par conséquent char n’est pas un type valide.

Varchar

PySpark traite tout littéral comme un type de chaîne, par conséquent Varchar n’est pas un type valide.

Décimal

La valeur minimale. La valeur maximale. La valeur moyenne. La précision décimale.

Tableau

Le type de la valeur. Si autorisé, null en tant qu’élément. La proportion de valeurs nulles. La taille maximale du tableau. La taille minimale du tableau. La taille moyenne des tableaux. Si tous les tableaux ont la même taille.

Binaire

La taille maximale. La taille minimale. La taille moyenne. Si tous les éléments ont la même taille.

Map

Le type de la clé. Le type de la valeur. Si autorisé, null comme valeur. La proportion de valeurs nulles. La taille maximale du mappage. La taille minimale du mappage. La taille moyenne des mappages. Si toutes les mappages ont la même taille.

Nul

NullType représente Aucun, car les données du type ne peuvent pas être déterminées ; il n’est donc pas possible d’obtenir des informations à partir de ce type.

Struct

Les métadonnées de la struct, c’est pour chaque structField : name, type, nullable, rows count, rows not null count et rows null count. Il s’agit d’un tableau.

Il définit également un ensemble de contrôles de validation prédéfinis pour chaque type de données, détaillés dans la table suivante :

Les contrôles sont collectés en fonction du type de colonne

Type

Contrôles Pandera

Contrôles supplémentaires

Booléen

Chaque valeur est Vrai ou Faux.

Le nombre de valeurs vraies et fausses.

Numérique (byte, short, integer, long, float et double)

Chaque valeur est comprise entre la valeur minimale et la valeur maximale.

La précision décimale. La valeur moyenne. L’écart-type.

Date

N/A

Valeurs minimales et maximales.

Horodatage

Chaque valeur est comprise entre la valeur minimale et la valeur maximale.

Le format de la valeur.

Horodatage ntz

Chaque valeur est comprise entre la valeur minimale et la valeur maximale.

Le format de la valeur.

Chaîne

La longueur de chaque valeur est comprise entre la longueur minimale et la longueur maximale.

Aucun(e)

Char

PySpark traite tout littéral comme un type de chaîne, par conséquent char n’est pas un type valide.

Varchar

PySpark traite tout littéral comme un type de chaîne, par conséquent Varchar n’est pas un type valide.

Décimal

N/A

N/A

Tableau

N/A

Aucun(e)

Binaire

N/A

Aucun(e)

Map

N/A

Aucun(e)

Nul

N/A

N/A

Struct

N/A

Aucun(e)

Ce mode permet à l’utilisateur de définir un échantillon de DataFrame à collecter, mais il est facultatif. Par défaut, la collection fonctionne avec l’ensemble du DataFrame. La taille de l’échantillon doit être statistiquement représentative de la population.

Pandera ne peut que déduire le schéma d’un DataFrame Pandas, ce qui implique que le DataFrame PySpark doit être converti en un DataFrame Pandas, ce qui peut affecter les résolutions de type des colonnes. En particulier, Pandera déduit les types PySpark suivants en tant que types d’objets : string, array, map, null, struct et binary.

La sortie de ce mode est un fichier JSON pour chaque DataFrame collecté, le nom du fichier étant le même que celui du point de contrôle. Ce fichier contient des informations relatives au schéma et comporte deux sections :

  1. La section Schéma Pandera contient les données déduites par Pandera telles que le nom, le type (Pandas), si la colonne autorise les valeurs nulles ou non, et d’autres informations pour chaque colonne, et vérifie si la colonne est basée sur le type PySpark. Il s’agit d’un objet DataFrameSchema de Pandera.

  2. La section des données personnalisées est un tableau des données personnalisées collectées par chaque colonne en fonction du type PySpark.

Note

Le paquet de collecte peut avoir des problèmes de mémoire lorsqu’il traite des DataFramesPySpark volumineux. Pour remédier à ce problème, vous pouvez définir le paramètre de l’échantillon dans la fonction de collecte à une valeur comprise entre 0.0 et 1.0, afin de travailler avec un sous-ensemble de données au lieu de l’ensemble du DataFrame PySpark.

Mode de données DataFrame collectées (DataFrame)

Ce mode permet de collecter les données du DataFrame PySpark. Dans ce cas, le mécanisme enregistre toutes les données du DataFrame donné au format Parquet. En utilisant la connexion par défaut de l’utilisateur Snowflake, il tente de télécharger les fichiers Parquet dans la zone de préparation temporelle de Snowflake et de créer une table sur la base des informations contenues dans la phase. Le nom du fichier et de la table est le même que celui du point de contrôle.

La sortie de ce mode est un fichier Parquet résultat de l’enregistrement du DataFrame et une table avec les données du DataFrame dans la connexion de configuration par défaut de Snowflake.