Transformieren Sie eine Avro-Datei mit Wrangler in JSON in Cloud Datafusion

Aug 31 2020

Ich versuche, eine Avro-Datei zu lesen, eine grundlegende Transformation durchzuführen (Datensätze mit Name = Ben entfernen) mit Wrangler und das Ergebnis als JSON-Datei in den Google Cloud-Speicher zu schreiben. Die Avro-Datei hat das folgende Schema:

{"type": "record", "name": "etlSchemaBody", "fields": [{"type": "string", "name": "name"}]}

Transformation in Wrangler ist die folgende: Transformation

Das folgende Ausgabeschema für die JSON-Datei lautet: Ausgabeschema

Wenn ich die Pipeline ausführe, wird sie erfolgreich ausgeführt und die JSON-Datei wird im Cloud-Speicher erstellt. Die JSON-Ausgabe ist jedoch leer. Wenn ich einen Vorschau-Lauf versuche, wird folgende Meldung angezeigt: Warnmeldung

Warum ist die JSON-Ausgabedatei im gcloud-Speicher leer?

Antworten

1 S.Tyr Sep 01 2020 at 22:06

Wenn Sie den Wrangler zum Durchführen von Transformationen verwenden, sind die Standardwerte für die GCS-Quelle format: textund body: string(Datentyp). Um jedoch ordnungsgemäß mit einer Avro-Datei im Wrangler zu arbeiten, müssen Sie dies ändern blobund das Format und den Body-Datentyp byteswie folgt festlegen :

Danach sollte die Vorschau für Ihre Pipeline Ausgabedatensätze erzeugen. Sie können mein Arbeitsbeispiel als nächstes sehen:

  • Beispieldaten
  • Transformationen
  • Vorschau der Eingabedatensätze für die GCS-Senke (endgültige Ausgabe)

Bearbeiten:

Sie müssen das format: blobund das Ausgabeschema so einstellen, als body: bytesob Sie die Datei wie zuvor beschrieben im Wrangler auf Avro analysieren möchten, da der Inhalt der Datei in einem Binärformat benötigt wird.

Wenn Sie jedoch nur Filter (innerhalb des Wrangler) anwenden möchten, können Sie Folgendes tun:

  • Öffnen Sie die Datei mit format: avro, siehe img .
  • Stellen Sie das Ausgabeschema gemäß den Feldern ein, die Ihre Avro-Datei hat, in diesem Fall namemit stringDatentyp, siehe img .
  • Verwenden Sie nur Filter für den Wrangler (hier keine Analyse von Avro), siehe Abbildung .

Auf diese Weise erhalten Sie auch das gewünschte Ergebnis .