2017-07-14 2 views
0

Ich habe ein Datenfeld in Pyspark, die rund 150 Spalten hat. Diese Spalten ergeben sich aus dem Zusammenfügen verschiedener Tabellen. Nun besteht meine Anforderung darin, den Datenrahmen in eine Datei zu schreiben, aber in einer bestimmten Reihenfolge wie zuerst 1 bis 50 Spalten schreiben, dann Spalte 90 bis 110 und dann Spalte 70 und 72. Das heißt, ich möchte nur bestimmte Spalten auswählen und neu anordnen.wählen Sie zufällige Spalten aus einem sehr großen Datenrahmen in pyspark

Ich kenne einen der Weg ist, df.select zu verwenden ("geben Sie Ihre Spalte Reihenfolge"), aber in meinem Fall sind die Spalten sehr groß und es ist nicht möglich, jeden einzelnen Spaltennamen in 'auswählen ".

Bitte sagen Sie mir, wie ich das in pyspark erreichen kann.

Hinweis- Ich kann keine Beispieldaten bereitstellen, da die Anzahl der Spalten sehr groß ist und die Spaltennummer in meinem Fall der Hauptblockierer ist.

+0

nicht sicher, warum 'df.select (list_of_columns)' ist ein Thema – muon

+0

Df.select ist kein Problem, aber ich möchte das Schreiben mehr als 100 Spalten in vermeiden wählen. Ich suche nach einem Weg, wo ich einen Bereich von Spalten wie 1-50,55 angeben kann und es wählt 50 Spalten und dann 55. Spalte aus. – pam18

Antwort

0

Es ist wie alles klingt, die Sie tun möchten, ist programmatisch die Liste der Spaltennamen zurückgeben, aus dieser Liste eine Scheibe oder Scheiben auswählen, und wählen Sie dann, dass die Teilmenge von Spalten in einige Bestellung von Ihrem Datenrahmen. Sie können dies tun, indem Sie die Liste df.columns bearbeiten. Als Beispiel:

a=[list(range(10)),list(range(1,11)),list(range(2,12))] 
df=sqlContext.createDataFrame(a,schema=['col_'+i for i in 'abcdefghij']) 

df ist ein Datenrahmen mit Spalten ['col_a', 'col_b', 'col_c', 'col_d', 'col_e', 'col_f', 'col_g', 'col_h', 'col_i', 'col_j'] ist. Sie können diese Liste zurückgeben, indem Sie df.columns aufrufen, die Sie wie jede andere Python-Liste aufteilen und neu anordnen können. Wie Sie das tun, hängt von Ihnen ab und welche Spalten Sie aus dem df und in welcher Reihenfolge auswählen möchten. Zum Beispiel:

mycolumnlist=df.columns[8:9]+df.columns[0:5] 
df[mycolumnlist].show() 

Returns

+-----+-----+-----+-----+-----+-----+ 
|col_i|col_a|col_b|col_c|col_d|col_e| 
+-----+-----+-----+-----+-----+-----+ 
| 8| 0| 1| 2| 3| 4| 
| 9| 1| 2| 3| 4| 5| 
| 10| 2| 3| 4| 5| 6| 
+-----+-----+-----+-----+-----+-----+ 
+0

Danke !! Das hat für mich funktioniert. – pam18

0

Sie können die Liste der Spalten programmatisch

first_df.join(second_df, on-'your_condition').select([column_name for column_name in first_df.columns] + [column_name for column_name in second_df.columns]) 

erstellen Sie zufällig ausgewählte Untergruppe von Spalten mithilfe von random.sample(first_df.columns, number_of_columns) Funktion auswählen können.

this helps :)

+0

Dies wird nach dem Zufallsprinzip Spalten auswählen, anstatt was ich es auswählen möchte. – pam18

+0

Wenn Sie wissen, welche * Spalten Sie auswählen möchten, können Sie Folgendes verwenden: [[Spaltenname für Spaltenname in Erste_Datei.spalten, wenn Spaltenname in Spaltengruppe] 'wobei Spaltenuntermenge die Liste der Spalten ist, die Sie auswählen möchten. Dies kann fehlschlagen, wenn beide Datensätze dieselben Spalten enthalten. – sstamenov

Verwandte Themen