Snowpark Checkpoints-Bibliothek: Sammler¶
Das Paket snowpark-checkpoints-collectors
bietet eine Funktion zum Extrahieren von Informationen aus der PySpark DataFrames. Diese Daten können wir dann mit den konvertierten Snowpark-DataFrames abgleichen, um die Gleichwertigkeit der Verhaltensweise sicherzustellen.
Verwenden Sie die folgende Funktion, um einen neuen Checkpoint-Sammelpunkt einzufügen:
Funktionssignatur:
def collect_dataframe_checkpoint(df: SparkDataFrame, checkpoint_name: str, sample: Optional[float], mode: Optional[CheckpointMode], output_path: Optional[str]) -> None:
Funktionsparameter:
df: Der PySpark-DataFrame
checkpoint_name: Der Name des Checkpoints
Beginnt mit einem Buchstaben (A-Z, a-z) oder einem Unterstrich (_) und enthält nur Buchstaben, Unterstriche und Ziffern (0–9).
sample: (optional) Der Stichprobenumfang
Der Standardwert ist 1.0 (ganz PySpark DataFrame) in einem Bereich von 0 bis 1.0.
mode: (optional) Der Ausführungsmodus
Die Optionen sind
SCHEMA
(Standard) undDATAFRAME
.output_path: (Optional) Der Pfad zu der Datei, in der der Checkpoint gespeichert wird
Der Standardwert ist das aktuelle Arbeitsverzeichnis.
Der Sammlungsprozess erzeugt eine JSON-Ausgabedatei namens checkpoint_collection_result.json
mit folgenden Informationen über das Ergebnis für jeden Sammelpunkt:
Ein Zeitstempel, wann der Sammelpunkt gestartet wurde
Der relative Pfad der Datei, in der sich der Sammelpunkt befindet
Die Codezeile der Datei, in der sich der Sammelpunkt befindet
Der Name des Checkpoints des Sammelpunkts
Das Ergebnis der Sammelpunkts (fehlgeschlagen oder bestanden)
Modus für die Schema-Inferenz der gesammelten Daten (Schema)¶
Dies ist der Standardmodus, der die Schema-Inferenz von Pandera nutzt, um die Metadaten und Prüfungen zu erhalten, die für den angegebenen DataFrame ausgewertet werden. In diesem Modus werden auch benutzerdefinierte Daten aus den Spalten des DataFrame auf der Grundlage des PySpark-Typs erfasst.
Die Spaltendaten und -prüfungen werden auf der Grundlage des PySpark-Typs der Spalte erfasst (siehe die folgenden Tabellen). Für jede Spalte, unabhängig von ihrem Typ, werden die folgenden benutzerdefinierten Daten gesammelt: Name der Spalte, Typ der Spalte, ob sie Nullwerte zulässt, Anzahl der Zeilen, Anzahl der ungültigen Zeilen und Anzahl der Nullzeilen.
Spaltentyp |
Erfasste benutzerdefinierte Daten |
---|---|
Numerisch ( |
Mindestwert; Höchstwert; Mittelwert; Genauigkeit der Dezimalstelle (im Falle des Typs „Ganzzahl“ ist der Wert 0); Standardabweichung |
Date |
Mindestwert; Höchstwert; Datumsformat (%Y-%m-%d) |
DayTimeIntervalType und YearMonthIntervalType |
Mindestwert; Höchstwert |
Zeitstempel |
Mindestwert; Höchstwert; Datumsformat (%Y-%m-%dH:%M:%S) |
Zeitstempel ntz |
Mindestwert; Höchstwert; Datumsformat (%Y-%m-%dT%H:%M:%S%z) |
String |
Wert für Mindestlänge; Wert für Höchstlänge |
Char |
PySpark behandelt jedes Literal als Zeichenfolgentyp, daher ist char kein gültiger Typ. |
Varchar |
PySpark behandelt jedes Literal als Zeichenfolgentyp, daher ist Varchar kein gültiger Typ. |
Dezimalzahl |
Mindestwert; Höchstwert; Mittelwert; Genauigkeit der Dezimalstellen |
Array |
Typ des Wertes; falls erlaubt, 0 als Element; Anteil der Nullwerte; maximale Array-Größe; minimale Array-Größe; mittlere Größe von Arrays; ob alle Arrays die gleiche Größe haben |
Binär |
Höchstgröße; Mindestgröße; mittlere Größe; ob alle Elemente die gleiche Größe haben |
Zuordnung |
Typ des Schlüssels; Typ des Wertes; falls erlaubt, ist Null ein zulässiger Wert; Anteil der Nullwerte; maximale Zuordnungsgröße; minimale Zuordnungsgröße; mittlere Zuordnungsgröße; ob alle Zuordnungen die gleiche Größe haben |
NULL |
NullType steht für „Keine“, da die Daten des Typs nicht ermittelt werden können. Daher ist es nicht möglich, Informationen von diesem Typ abzurufen. |
Struktur |
Die Metadaten der Struktur für jedes structField: |
Sie definiert außerdem eine Reihe von vordefinierten Validierungsprüfungen für jeden Datentyp, die in der folgenden Tabelle aufgeführt sind:
Typ |
Pandera-Prüfungen |
Zusätzliche Prüfungen |
---|---|---|
Boolesch |
Jeder Wert ist „True“ oder „False“. |
Die Anzahl der True- und False-Werte |
Numerisch ( |
Jeder Wert liegt im Bereich von Minimalwert und Maximalwert. |
Genauigkeit der Dezimalstellen; Mittelwert Standardabweichung |
Date |
N/A |
Mindest- und Höchstwerte |
Zeitstempel |
Jeder Wert liegt im Bereich von Minimalwert und Maximalwert. |
Das Format des Werts |
Zeitstempel ntz |
Jeder Wert liegt im Bereich von Minimalwert und Maximalwert. |
Das Format des Werts |
String |
Jede Wertlänge liegt im Bereich der min. und max. Länge. |
Keine |
Char |
PySpark behandelt jedes Literal als Zeichenfolgentyp; daher ist |
|
Varchar |
PySpark behandelt jedes Literal als Zeichenfolgentyp; daher ist |
|
Dezimalzahl |
N/A |
N/A |
Array |
N/A |
Keine |
Binär |
N/A |
Keine |
Zuordnung |
N/A |
Keine |
NULL |
N/A |
N/A |
Struktur |
N/A |
Keine |
Dieser Modus erlaubt es dem Benutzer, eine Stichprobe eines DataFrame zur Erfassung definieren – die ist jedoch optional. Standardmäßig erfolgt die Erfassung über den gesamten DataFrame. Der Umfang der Stichprobe muss die Population statistisch repräsentieren.
Pandera kann nur das Schema eines Pandas-DataFrame ableiten, was bedeutet, dass der PySpark-DataFrame in einen Pandas-DataFrame konvertiert werden muss, was sich auf die Typauflösungen der Spalten auswirken kann. Insbesondere ermittelt Pandera die folgenden PySpark-Typen als Objekttypen: string
, array
, map
, null
, struct
und binary
.
Die Ausgabe dieses Modus ist eine JSON-Datei für jeden erfassten DataFrame, und der Name der Datei ist derselbe wie der Checkpoint. Diese Datei enthält Informationen über das Schema und besteht aus zwei Abschnitten:
Der Abschnitt Pandera-Schema enthält die von Pandera abgeleiteten Daten wie Name, Typ (pandas), ob die Spalte Nullwerte zulässt oder nicht, sowie weitere Informationen für jede Spalte. Außerdem wird geprüft, ob die Spalte auf dem PySpark-Typ basiert. Es ist ein
DataFrameSchema
-Objekt von Pandera.Der Abschnitt custom data ist ein Array mit den benutzerdefinierten Daten, die von jeder Spalte auf der Grundlage des PySpark-Typs erfasst werden.
Bemerkung
Bei der Verarbeitung großer PySpark DataFrames kann es bei der Erfassung zu Speicherproblemen kommen. Um mit einer Teilmenge der Daten statt mit dem gesamten PySpark-DataFrame zu arbeiten, können Sie den sample-Parameter in der Sammelfunktion auf einen Wert zwischen 0,0 und 1,0 setzen.
DataFrame-Modus für erfasste Daten (DataFrame)¶
Dieser Modus erfasst die Daten des PySpark DataFrame. In diesem Fall speichert der Mechanismus alle Daten des angegebenen DataFrame im Parquet-Format. Unter Verwendung der Standard-Snowflake-Verbindung des Benutzers wird versucht, die Parquet-Dateien in den temporären Stagingbereich von Snowflake hochzuladen und eine Tabelle auf der Grundlage der Informationen im Stagingbereich zu erstellen. Der Name der Datei und der Tabelle ist derselbe wie der des Checkpoints.
Die Ausgabe dieses Modus ist eine Parquet-Datei, die als Ergebnis des DataFrame gespeichert wird, und eine Tabelle mit den DataFrame-Daten in der Standard-Snowflake-Konfigurationsverbindung.