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:
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
etDATAFRAME
. La valeur par défaut estSCHEMA
.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.
Type de colonne |
Données personnalisées collectées |
---|---|
Numérique ( |
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 : |
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 :
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 ( |
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 |
|
Varchar |
PySpark traite tout littéral comme un type de chaîne, par conséquent |
|
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 :
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.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.