2017-05-11 4 views
1

Ich habe vor kurzem mit pyspark auf Jupyter Notebook gearbeitet. Ich versuche, Daten aus Parkettdateien zu lesen, um mit diesen Daten ein Diagramm in Neo4J zu erstellen. Ich kann erfolgreich Daten von HDFS in die Datenrahmen laden.Extrahieren von großen Datensätzen aus einem Datenrahmen pyspark

Wenn die Datengröße begrenzt ist, funktioniert alles gut, ich bin in der Lage, eine Python-Liste mit der collect() -Methode zu extrahieren und dann darüber zu schleifen. Wenn die Datengröße zunimmt, erhalte ich offensichtlich einen "Java Heap Size" -Fehler (der Datenrahmen enthält über 13 Millionen und einige hunderttausend Zeilen verteilt über fünf Spalten).

Ich habe versucht, die foreach (f) zu verwenden, aber ich bekomme "Tupel Index außerhalb des Bereichs". Wenn ich df.select ('columnName'). Show() verwende, kann ich die Daten sehen; aber die Sache ist, dass ich die Werte extrahieren muss, um das Diagramm mit einer Neo4j-Sitzung zu konstruieren (session.run ('Cypher query')

Meine Frage ist: Gibt es eine Möglichkeit, die Leitungen (und daher Daten extrahieren aus den Zeilen) eines Datenrahmens, wenn ich eine wichtige Datenmenge haben

PS: ich diese librairies bin mit: findspark, pyspark, neo4j.v1

Antwort

1

ich sehe, dass es keine Antworten waren Nun, ich veröffentliche, wie ich Dinge löste, für den Fall, dass jemand in der Zukunft das gleiche Problem hatte.Der exakt gleiche Code funktionierte auf einem Python 2 Kernel, aber nicht auf einem Python 3. Ich musste eine ältere Version von jupyter installieren, die supp orted pyhton 2.7 und alles hat perfekt funktioniert (Falls Sie auf einem Server arbeiten, auf dem Sie volle Berechtigungen und Internetverbindung haben, installieren Sie einfach einen neuen Kernel zusätzlich zu dem ersten). Anstelle von collect() habe ich foreachPartition() verwendet und es hat perfekt funktioniert.

Verwandte Themen