Ich möchte JSON-Dateien in meinem AWS Glue ETL-Auftrag verarbeiten.
Lösung
JSON-Dateien in ein anderes Format umwandeln
Um eine JSON-Datei in ein anderes Format umzuwandeln, verwende Visual ETL, um einen AWS Glue-ETL-Auftrag zu erstellen. Wähle als Data source (Datenquelle) JSON aus. Wähle als Data target (Datenziel) das neue Dateiformat aus. Wähle S3 als Node type (Knotentyp) für die Data source (Datenquelle) und das Data target (Datenziel).
Einen JSON-Klassifikator erstellen, um verschachtelte JSON-Daten zu lesen
Wenn der AWS Glue-Crawler verschachtelte Spalten lesen muss, erstelle einen benutzerdefinierten Klassifikator, der als JSON-Klassifikator definiert ist. Erstelle einen neuen AWS Glue-Crawler. Füge den benutzerdefinierten JSON-Klassifikator zur Klassifikatorliste des neuen AWS Glue-Crawlers hinzu.
Verwende relationalize (relationalisieren), um verschachtelte JSON-Spalten im AWS Glue-ETL-Auftrag in Spalten umzuwandeln. Du kannst die Option jsonPath auch in den Formatoptionswerten der AWS Glue-ETL-Auftragskonfiguration verwenden. Codebeispiele findest du unter Beispiel: JSON-Dateien oder -Ordner aus Amazon Simple Storage Service (Amazon S3) lesen.
Verwende die Option unnest, um verschachtelte Felder in Objekte der obersten Ebene umzuwandeln.
Verwendung eines AWS Glue-Crawlers, um JSON-Arrays zu parsen
Standardmäßig behandelt der AWS Glue-Crawler Daten als ein einzelnes Array. Um ein Schema zu erstellen, das auf jedem Datensatz in einem JSON-Array basiert, erstelle einen benutzerdefinierten JSON-Klassifikator. Für den JSON-Pfad $[*] eingeben
Wenn du einen AWS Glue-ETL-Auftrag verwendest, um ein JSON-Array zu lesen, verwende die explode-Funktion in Apache Spark, um Arrays in Zeilen umzuwandeln. Weitere Informationen findest du unter pyspark.sql.functions.explode auf der Spark-Website.
Du kannst auch die Funktion to_json verwenden, um Arrays in Zeichenfolgen umzuwandeln. Weitere Informationen findest du unter pyspark.sql.functions.to_json auf der Spark-Website.
Problembehandlung bei DynamicFrame-Zählungen, die nicht mit der Anzahl der Datensätze in einer Datenquelle übereinstimmen
Wenn die DynamicFrame-Anzahl nicht mit der Anzahl der Datensätze in der JSON-Datenquelle übereinstimmt, enthalten die Daten nicht wohlgeformte Datensätze. Führe den folgenden Befehl errorsAsDynamicFrame aus, um nicht wohlgeformte Datensätze im Datensatz zu finden:
# View error fields and error data
error_record = dynamicframe_df.errorsAsDynamicFrame().toDF().head()
Einstellen von mehrzeiligen Werten, um JSON-Datensätze zu lesen, die mehrere Zeilen enthalten
Wenn der JSON-Datensatz mehrere Zeilen umfasst, setze den Wert multiline (mehrzeilig) in den Formatoptionen der AWS Glue-ETL-Auftragskonfiguration auf true (wahr). Standardmäßig ist der Wert multiline (mehrzeilig) auf false (falsch) gesetzt.