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

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

  • Pour insérer un nouveau point de collection des points de contrôle, utilisez la fonction suivante :

    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 PySpark DataFrame

    • 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 (0-9).

    • sample : (Facultatif) la taille de l’échantillon

      La valeur par défaut est 1.0 (PySparkDataFrame) dans une plage de 0 à 1.0.

    • mode : (Facultatif) le mode d’exécution

      Les options sont : SCHEMA (par défaut) et DATAFRAME.

    • output_path : (Facultatif) le chemin d’accès au fichier dans lequel le point de contrôle est enregistré

      La valeur par défaut est le répertoire de travail actuel.

Le processus de collection génère un fichier de sortie JSON, appelé checkpoint_collection_result.json, qui contient les informations suivantes sur le résultat pour chaque point de collection :

  • Un horodatage du début du point de collection

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

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

  • Le nom du point de contrôle du point de collection

  • Le résultat du point de collection (é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 suivantes). Pour toute colonne, quel que soit son type, les données personnalisées collectées comprennent le nom de la colonne, le type de la colonne, une valeur nulle étant 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)

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

Date

Valeur minimale ; valeur maximale ; format de date (%Y-%m-%d)

DayTimeIntervalType et YearMonthIntervalType

Valeur minimale ; valeur maximale

Horodatage

Valeur minimale ; valeur maximale ; format de date (%Y-%m-%dH:%M:%S)

Horodatage ntz

Valeur minimale ; valeur maximale ; format de date (%Y-%m-%dT%H:%M:%S%z)

Chaîne

Valeur de la longueur minimale ; valeur de 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

Valeur minimale ; valeur maximale ; valeur moyenne ; précision décimale

Tableau

Type de la valeur ; si autorisé, nul en tant qu’élément ; proportion de valeurs nulles ; taille maximale du tableau ; taille minimale du tableau ; taille moyenne des tableaux ; si tous les tableaux ont la même taille

Binaire

Taille maximale ; taille minimale ; taille moyenne ; si tous les éléments ont la même taille

Map

Type de la clé ; type de la valeur ; si autorisé, nul comme valeur ; proportion de valeurs nulles ; taille maximale du mappage ; taille minimale du mappage ; 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 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.

Précision décimale ; valeur moyenne ; é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 PySpark DataFrame 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é, et le nom du fichier est le même que celui du point de contrôle. Ce fichier contient des informations relatives au schéma et comporte deux sections :

  • La section du 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, ainsi que les vérifications des colonnes basées sur le type PySpark. Il s’agit d’un objet :code:`DataFrameSchema`de pandera.

  • 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 PySparkDataFrames volumineux. Pour travailler avec un sous-ensemble de données au lieu de l’ensemble du PySpark DataFrame, vous pouvez définir le paramètre de l’échantillon dans la fonction de collection à une valeur comprise entre 0,0 et 1,0.

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.