Ich habe schon viel recherchiert, konnte aber keine Lösung finden. Die nächste Frage, die ich hier finden konnte, ist Why my SPARK works very slowly with mongoDB.Wie effizient Daten von Mongodb lesen und in Dataframe von Spark konvertieren?
Ich versuche, eine Mongodb-Sammlung in Funken DataFrame mit Mongo-Hadoop-Anschluss zu laden. Hier ist ein Ausschnitt des entsprechenden Code:
connection_string = 'mongodb://%s:%s/randdb.%s'%(dbhost, dbport, collection_name)
trainrdd = sc.mongoRDD(connection_string, config=config)
# traindf = sqlcontext.createDataFrame(trainrdd)
# traindf = sqlcontext.read.json(trainrdd)
traindf = sqlcontext.jsonRDD(trainrdd)
Hier 'sc' ist das SparkContext Objekt. Ich habe auch die Varianten ausprobiert, die im Code auskommentiert sind. Aber alle sind gleichermaßen langsam. Für eine Sammlung von 2 GB Größe (100000 Zeilen und 1000 Spalten) dauert es ungefähr 6 Stunden (holy moly: /) auf einem Cluster von 3 Maschinen mit jeweils 12 Kernen und 72 GB RAM (unter Verwendung aller Kerne in diesem Funkencluster). Der Mongodb-Server läuft ebenfalls auf einer dieser Maschinen.
Ich bin mir nicht sicher, ob ich es richtig mache. Hinweise zur Optimierung dieses Codes wären sehr hilfreich.
Sie sind auf die Verwendung von 'jsonRDD' bezieht, die langsam ist? Können Sie versuchen, die RDD auf andere Weise in DataFrame zu konvertieren? –
Hallo Wan Danke für die Antwort. Ja, die eigentliche Aktion beginnt, wenn Sie 'sqlcontext.jsonRDD (trainrdd)' aufrufen. Dies löst das mongodb-Lesen aus, wobei mongodb-Protokolle angeben, dass Verbindungen hergestellt und gelöscht werden. Ich habe andere Methoden ausprobiert (im obigen Code kommentiert), die ebenso langsam sind. Kürzlich habe ich sqlcontext.read.json in einer json-Datei aus der mongodb-Sammlung exportiert. Dies funktionierte relativ schnell vergleichsweise. – bitspersecond
Welche Glasversion des [mongodb mongo-hadoop-Zündkerzensteckers] (https://github.com/mongodb/mongo-hadoop/blob/master/spark/src/main/python/README.rst) benutzt du? Können Sie versuchen, den MongoDB-Server von Spark-Knoten zu trennen? –