2017-09-22 6 views
-1

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.

Antwort

1

Sie können Databricks spark-xml Paket nur auf Dateien (nicht auf RDD/DF) anwenden. Die einzige Möglichkeit besteht darin, Ihren DF unter einem temporären Pfad als Textdateien zu speichern, indem Sie DF.write.text() verwenden und neu gespeicherte Dateien lesen.

Aber hier kommt eine Frage - warum speichern Sie XMLs als einspaltige Parkett-Dateien in Ihrem Spark-Streaming-Job? Warum nicht Textdateien planen, lesbar von spark-xml Paket?

+0

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. –

+0

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

Verwandte Themen