Lesen von JSON-Dateien in Spark Dataset und Hinzufügen von Spalten aus einer separaten Map

8

Spark 2.1 und Scala 2.11 hier. Ich habe eine große Map[String,Date] , die 10K Schlüssel / Wert-Paare enthält. Ich habe auch 10K JSON-Dateien auf einem Dateisystem, das für Spark zugänglich ist:

%Vor%

Jedes KV-Paar in der Karte entspricht der jeweiligen JSON-Datei (daher entspricht das 1. Karten-KV-Paar data00001.json , usw.)

Ich möchte alle diese JSON-Dateien in einem großen Spark Dataset lesen und, während ich dabei bin, diesem Datensatz zwei neue Spalten hinzufügen (die in den JSON-Dateien nicht existieren). Jeder Kartenschlüssel ist der Wert für die erste neue Spalte und der Wert jeder Taste ist der Wert für die zweite neue Spalte:

%Vor%

Ich habe bestätigt, dass Spark den Platzhalter ( mnt/some/path/*.json ) berücksichtigt und alle JSON-Dateien in einem einzigen Datensatz liest, wenn ich die Methoden withColumn lösche und allData.show() mache. Also bin ich alle gut dort.

Was mich beschäftigt, ist: Wie füge ich die zwei neuen Spalten hinzu und ziehe dann alle Schlüssel / Wert-Map-Elemente richtig aus?

    
smeeb 01.08.2017, 18:15
quelle

2 Antworten

4

Wenn ich es richtig verstanden habe, wollen Sie eine KV von einer Karte mit Datenrahmen aus JSON-Dateien korrelieren.

Ich werde versuchen, das Problem auf nur drei Dateien und drei Schlüsselwerte zu reduzieren, die alle geordnet sind.

%Vor%

Definieren Sie eine Fallklasse für die Handhabung einfacherer Dateien, Schlüssel, Werte

%Vor%

Zip die Dateien und kvs

%Vor%

Es wird so aussehen

%Vor%

Wir fangen dann mit einem Anfangsdatenframe vom Kopf unserer Sammlung an und beginnen dann, nach links zu falten, um den gesamten Datenrahmen zu konstruieren, der alle Dateien enthält, wobei alle Spalten dynamisch aus KV erzeugt werden.

%Vor%

Jetzt das Faltteil

%Vor%

Der Datenrahmen sieht wie folgt aus, wobei angenommen wird, dass in den JSON-Dateien eine Spalte namens bar und ein Wert foo für jede der 3 json-Dateien enthalten sein wird

%Vor%     
dumitru 07.08.2017 19:03
quelle
3

Ich denke, du solltest dafür deine eigene Datenquelle erstellen. Diese neue Datenquelle würde über Ihre spezielle Ordnerstruktur und Inhaltsstruktur wissen.

    
Michel Lemay 10.08.2017 19:44
quelle