2016-05-24 10 views
2

Mein Problem ist, dass ich mehrere TXT-Dateien mit identischer Struktur habe, die ich in Spark importieren möchte. Erstellen Sie dann eine Bezeichnerspalte, fassen Sie die Daten zusammen und stapeln Sie sie schließlich.Mehrere Dateien in Spark lesen und vor dem Anhängen verarbeiten

z. einer der Datei sieht wie folgt aus: so aussehen

Date  A B C 
2/21/2014 A1 11 2 
2/22/2014 A1 11 5 
2/23/2014 A1 21 3 
2/24/2014 A1 13 5 
2/25/2014 A1 23 4 
2/26/2014 A1 28 4 
2/27/2014 A1 32 2 
2/28/2014 B1 45 4 
3/1/2014 B1 39 4 
3/2/2014 B1 29 4 
3/3/2014 B1 49 5 
3/4/2014 B1 18 4 
3/5/2014 B1 30 3 
3/6/2014 B1 50 5 

Nach Lesen dieser Datei, ich möchte eine Spalte zu erwähnen, Dateinamen und die aktualisierten Daten hinzuzufügen:

Date A B C File 
2/21/2014 A1 22 2 File1 
2/22/2014 A1 36 2 File1 
2/23/2014 A1 17 4 File1 
2/24/2014 A1 30 2 File1 
2/25/2014 A1 11 2 File1 
2/26/2014 A1 32 2 File1 
2/27/2014 A1 19 5 File1 
2/28/2014 B1 22 3 File1 
3/1/2014 B1 12 5 File1 
3/2/2014 B1 50 3 File1 
3/3/2014 B1 42 4 File1 
3/4/2014 B1 37 4 File1 
3/5/2014 B1 31 5 File1 
3/6/2014 B1 20 3 File1 

und dann die Daten zusammenfassen :

File A B C 
File1 A1 167 19 
File1 B1 214 27 

Similey, ein weiterer Datensatz wird erstellt und zusammengefasst. Endlich zusammengestapelt. Bei 2-Dateien suchen die Datensätze wie folgt aus:

File A B C 
File1 A1 167 19 
File1 B1 214 27 
File2 Z10 167 19 
File2 X20 214 27 

ich die Daten einzeln importieren, sie Prozess, indem sie in Datenrahmen konvertieren und sie dann schließlich stapeln. Aber ich konnte das nicht automatisch machen. Kann mir bitte jemand helfen.

Vielen Dank!

+0

Haben Sie versucht, ein Stück der Logik? – WoodChopper

+0

@WoodChopper: Danke für Ihren Kommentar. Für die Automatisierung, nein. Aber ich lese die Daten, konvertiert in SQL-Datenrahmen, fügte die neue Spalte mit dem Dateinamen hinzu. Wenn du willst, kann ich die Codes, die ich bisher benutzt habe, in die Frage selbst stellen. – Beta

Antwort

1

Wenn einzelne Datei in den Speicher passt können Sie wholeTextFiles verwenden,

rdd = sc.wholeTextFiles("/directorypath/*") 

def appender(x): 
    i = x[0] 
    j = x[1].split("\n") 
    k = [x.split() for x in j] 
    l = [x.append(i) for x in k] 
    return k 

frdd = rdd.flatMap(appender) 

df = frdd.toDF("Date","A","B","C","FileName") 

wholeTextFiles kehrt Tupel von (Dateiname, Inhalt der Datei) von dort aus können Sie den Dateinamen anhängen.

+0

Vielen Dank für Ihre Antwort. Das war sehr hilfreich! – Beta

Verwandte Themen