2017-12-15 1 views
0

Ich habe versucht zu verstehen, wie der Mongo-Spark-Stecker unter der Haube funktioniert, aber ich bekomme immer noch nicht die ganze Arbeitslogik dahinter.Was ist die Arbeitslogik des Mongo-Spark Connectors?

Einzelheiten: Ich versuche Mongo-Funken zu verwenden, um einen Funken Job, die hauptsächlich Textsuche gegen eine MongoDB Sammlung durchführen zu laufen. Funken- und MongoDB laufen auf zwei verschiedenen Clustern

Also habe ich die folgende Funken Mongo Datenrahmen:

entity_df = sqlContext.read.format("com.mongodb.spark.sql.DefaultSource") \ 
         .option("spark.mongodb.input.database", "WikiData") \ 
         .option("spark.mongodb.input.collection", "entities_slim") \ 
         .load() 

entity_df.cache() 
df = entity_df.filter(entity_df['id'] == "Q2834810").show() 

Ist die erste Anweisung bedeutet, dass die entities_slim Sammlung aus dem Cluster MongoDB kopiert wird, um die Funken Cluster und als Spark DataFrame dargestellt?

Wenn ja, bedeutet das, dass der Connector nur ein Werkzeug ist, das nur Daten zwischen MongoDB und Spark liest/schreibt?

Wenn ja, gibt es eine Möglichkeit, Spark-Jobs zu erstellen, die MongoDB-Requests von der MongoDB-Engine ausführen? so etwas wie:

import pymongo 
from pyspark import SparkContext 

spark_rdd.map(lamda x: entities.find_one({'id': best})) 

Beachten Sie, dass Anweisung ausführen entity_df.filter(entity_df['id'] == "Q2834810").show() läuft viel langsamer als direkt abfragt MongoDB mit pymongo

Antwort

1

Wenn ja, bedeutet dies, dass der Stecker ist nur ein Werkzeug, das nur/Schreibdaten liest zwischen MongoDB und Spark?

Bis zu einem gewissen Grad, aber es bedeutet nicht, dass

die entities_slim Sammlung aus dem Cluster MongoDB kopiert wird.

Selektionen (Filter) are converted to aggregation pipelines:

Wenn SQL unter Verwendung von Filtern mit Datenrahmen oder einen Funken, die darunter liegende Mongo Steckercode konstruiert eine Aggregation Pipeline die Daten in MongoDB zu filtern, bevor es das Senden Spark

Diese Art von Verhalten ist im Allgemeinen für die Datenquellen-API üblich - bei der Projektionen und Auswahlen nach Möglichkeit auf die Quelle übertragen werden.

auf Ihr Anliegen So geht zurück:

Beachten Sie, dass Anweisung entity_df.filter Ausführung (entity_df [ 'id'] == "Q2834810") show() läuft viel langsamer als direkt abfragt MongoDB mit pymongo.

Dies ist zu erwarten. Weder die Apache Spark- noch die MongoDB-Aggregationspipelines sind für Abfragen mit geringer Latenz und Einzelposten ausgelegt. Beide sind für die Massenverarbeitung in großem Maßstab gedacht. Wenn Sie schnellen Zugriff auf einzelne Artikel benötigen, sollten Sie Apache Spark nicht verwenden - dafür haben Sie Datenbanken.

Schließlich, wenn Lauf

Job, zu dem führt hauptsächlich Textsuche gegen eine MongoDB Sammlung.

integrierte MongoDB Textsuchfunktionen (so unvollkommen wie sie sind) könnte eine bessere Wahl sein.

+0

Danke @ user6910411. Ich brauche Spark, um Jobs auszuführen, die viele MongoDB-Abfragen ausführen müssen. Daher möchte ich keine Daten aus den MongoDB-Sammlungen zurückgeben, ausgenommen die Ergebnisse der Abfragen. Ist das möglich? –

1
  • Mit mongodb und Funken Anschluss Sie MongoDB Daten in Funken Hebel Funken laden können reichen von der API (Spark-SQL, Funken-Streaming, maschinelles Lernen, und Grafik-APIs) reiche Aggregationen Ihrer mongodb Daten auszuführen
  • Dies ermöglicht Ihnen, die Funken Fähigkeiten zu nutzen, um Ihre Daten zu analysieren Offloading Diese
  • spark ist zwei-Wege-Anschluss Sie können mongodb Daten in Funken und Funken RDD zurück zu MongoDB
  • laden

Hat der erste Befehl bedeutet, dass die entities_slim Sammlung vom MongoDB Cluster mit dem Funken Cluster- und als Funkendatenrahmen dargestellt kopiert?

Ja

Wenn ja, bedeutet dies, dass der Stecker nur ein Werkzeug ist, das nur Lese-/Daten zwischen MongoDB schreiben und Funken?

Ja

Wenn ja, Gibt es eine Möglichkeit Funken Arbeitsplätze zu schaffen, die MongoDB dert durch die MongoDB Motor laufen?

Sie müssen möglicherweise Daten von mongodb in mongodb selbst abfragen? Sie können Ihre Daten in Spark verarbeiten und speichern sie zurück zu mongodb

Verwandte Themen