Mein Spark-Streaming-Job dekomprimiert eine komprimierte XML-Datei und hängt sie als Zeichenfolge an Parkett File an. Mein Stapeljob liest Parkettdatei. Diese Datei enthält nur eine Spalte dekomprimierte XML-Zeichenfolge.So extrahieren Sie die XML-Zeichenfolge aus der Parkettspalte
Parkettdateischema:
DF.printSchema()
Wurzel
| - dekomprimiert: string (nullable = true)
Beispielprotokoll in Parkett-Datei
DF.show(1,False)
|decompress
------------------------------------------------+
|<Sale><ItemID >10</ItemID>......</Sale>
Ist Ich kann auf jeden Fall Data Bricks XML anwenden packen Sie es ein, um XML-Elemente zu extrahieren. Habe ich andere Möglichkeiten als UDF zu schreiben? Ich halte UDF als zweite Option, wenn man bedenkt, dass UDFs mehr Zeit für die Bearbeitung benötigen.
Danke, Marius. Mein Streaming-Job muss spezifische Spalten aus komprimiertem XML für Echtzeitberichte extrahieren. Mein Batch-Job muss Daten für Downstream-Systeme vorbereiten. Mein Batch-Job läuft einmal am Tag. Im Streaming-Job versuche ich, die XML-Datei zu dekomprimieren, die für die Berichterstellung erforderlichen Spalten zu extrahieren und die Daten für die Batch-Verarbeitung vorzubereiten (Batch-Job benötigt vollständige XML-Inhalte). Für den Batch-Prozess möchte ich nicht Tausende von sehr kleinen Dateien haben, zu diesem Zweck versuche ich, an eine Datei anzuhängen, anstatt jeden Stream in einer separaten Datei zu haben. –
AFAIK, selbst wenn Sie an Parkett-Daten (im Streaming-Job) anhängen, werden kleine Dateien in einem Verzeichnis erstellt. In Spark können Sie nicht einfach an Parkett-Datei anhängen, siehe [SPARK-18199] (https://issues.apache.org/jira/browse/SPARK-18199). Wenn Sie die Schreibmethode in Raw-Textdateien ändern, können Sie sie direkt im Batch-Job lesen. – Mariusz