Gewusst wie: laden-Verzeichnis von JSON-Dateien in Apache Spark Python
Ich bin relativ neu in Apache Spark, und ich möchte erstellen Sie eine einzelne RDD in Python aus Listen von Wörterbüchern gespeichert sind, in mehrere JSON-Dateien (jede ist gzipped und enthält eine Liste von Wörterbüchern). Die daraus resultierende RDD würde dann, grob gesagt, enthalten alle Listen von Wörterbüchern kombiniert in einer einzigen Liste der Wörterbücher. Ich habe nicht in der Lage zu finden diese in der Dokumentation (https://spark.apache.org/docs/1.2.0/api/python/pyspark.html), aber wenn ich es verpasst, bitte lassen Sie mich wissen.
So weit ich habe versucht, das Lesen der JSON-Dateien und die Erstellung der kombinierten Liste in Python, dann mit sc.parallelisieren(), jedoch wird der komplette Datensatz ist zu groß, um im Speicher, so ist dies nicht eine praktische Lösung. Wie es scheint, Spark wäre eine intelligente Art und Weise des Umgangs mit diesen use-case, aber ich bin mir nicht bewusst es.
Wie kann ich eine einzelne RDD in Python, bestehend aus den Listen in allen JSON-Dateien?
Sollte ich auch erwähnen, dass ich nicht wollen, verwenden Sie Spark SQL. Ich möchte die Funktionen wie map, filter, etc., wenn das möglich ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgenden, was tgpfeiffer erwähnt in Ihrer Antwort und Kommentar, hier ist was ich getan habe.
Zunächst, wie erwähnt, die JSON-Dateien, die musste formatiert werden, und so hatten Sie ein Wörterbuch pro Linie anstatt eine einzige Liste von Wörterbüchern. Dann, es war so einfach wie:
Ob es einen besseren oder effizienteren Weg, dies zu tun, bitte lassen Sie mich wissen, aber das scheint zu funktionieren.
Können Sie sqlContext.jsonFile() zu bekommen SchemaRDD (was ist ein RDD[Row] plus ein schema), die dann verwendet werden können, mit Spark SQL. Oder sehen Laden von JSON-Datensatz in die Funke, dann verwenden Sie filter, map, etc für einen nicht-SQL-verarbeitungspipeline. Ich glaube, Sie haben können, um entpacken Sie die Dateien, und auch Funke kann nur mit Dateien, in denen jede Zeile ist ein einzelnes JSON-Dokument (D. H., keine multiline-Objekte möglich).
sparkContext.textFile()
(die eigentlich scheint zu unterstützen Gzip-Dateien), dann analysiert die Zeichenfolge Linien mit einem parser Ihrer Wahl (z.B. das json-Modul), dann Bearbeiten, wie Sie möchten.Laden Sie ein Verzeichnis der Dateien in einer einzigen RDD mit textFile und es unterstützt auch wildcards. Das würde Ihnen nicht den Dateinamen, aber Sie scheinen nicht zu brauchen.
Können Sie Spark SQL während der Verwendung einfache Transformationen wie Karten, filter, etc. SchemaRDD ist auch ein RDD (in Python, als auch Scala)
Zur Liste laden von Json aus einer Datei wie
RDD
: