2017-01-12 5 views
1

Ich weiß, dass PySpark DataFrames unveränderlich sind, daher möchte ich eine neue Spalte erstellen, die aus einer Transformation resultiert, die auf eine vorhandene Spalte des PySpark DataFrame angewendet wird. Meine Daten sind zu groß, um collect() zu verwenden.Element aus der PySpark DataFrame-Spalte entfernen

Die betreffende Spalte ist eine Liste der Listen von einzigartigen Ints (keine Wiederholungen eines int in einer vorgegebenen Liste), zB:

[1] 
[1,2] 
[1,2,3] 
[2,3] 

Die oben Spielzeug Beispiel ist, als mein eigentlicher Datenrahmen Listen hat mit einer maximalen Länge von 52 einzigartigen Ints. Ich möchte eine Spalte erstellen, die durch die Liste der Ints-Listen iteriert und ein Element für jede Schleife entfernt. Das Element, das entfernt werden soll, ist eins aus dem Satz eindeutiger Elemente über alle Listen hinweg, in diesem Fall [1,2,3].

So für die erste Iteration:

Remove Element 1, so dass die Ergebnisse sind:

[] 
[2] 
[2,3] 
[2,3] 

Für die zweite Iteration:

Remove Element 2, so dass die Ergebnisse sind:

[1] 
[1] 
[1,3] 
[3] 

usw. und wiederholen Sie oben mit Element 3.

Für jede Iteration möchte ich die Ergebnisse an den ursprünglichen PySpark DataFrame anhängen, um einige Abfragen auszuführen, wobei diese "gefilterte" Spalte als Zeilenfilter für den ursprünglichen DataFrame verwendet wird.

Meine Frage ist, wie konvertiere ich eine Spalte eines PySpark DataFrame in eine Liste? Mein Datensatz ist groß, so dass df.select('columnofintlists').collect() zu Speicherproblemen führt (z. B. Kryo serialization failed: Buffer overflow. Available: 0, required: 1448662. To avoid this, increase spark.kryoserializer.buffer.max value.).

Antwort

0

df.toLocalIterator() wird einen Iterator für Schleife zurück

Verwandte Themen