Frage

Ich weiß, dass Spark die Leistung im Verhältnis zu MapReduce durch In-Memory-Berechnungen verbessert. Da der Programmierer jedoch explizit entschieden wird, kann man auch ohne das fortfahren. Ich glaube, selbst in solchen Fällen ist Spark 10x schneller als die MAP -Reduzierung. Welche Funktionen im Framework ermöglichen dies?

War es hilfreich?

Lösung

Nein, das ist im Allgemeinen nicht wahr. Für einen Nur-Map-Job oder eine Karte und Reduzierung ist MapReduce etwas schneller. Für dieses Muster ist es optimierter und viel einfacher zu skalieren / abzustimmen. Das Problem ist jedoch, dass nur wenige Probleme nur ein oder zwei Operationen sind. Sobald Sie eine Kette von ihnen ausführen müssen, ist es ein Gewinn, wenn man bedenkt, dass der gesamte DAG- und Ausführungsplan nicht gewinnt, auch wenn das Speicher nicht für die Persistenz verwendet wird.

Entwicklerproduktivität im Zusammenhang mit der Effizienz. Wenn ich nicht meine Zeit damit verbringen muss, Code auf niedrigerer Ebene zu schreiben, kann ich mehr Zeit damit verbringen, eine anspruchsvollere verteilte Anwendung zu entwerfen, die schneller sein könnte.

Sie können dies beispielsweise in Crunch sehen, was Ihnen eine hochrangige Sprache bietet, die Spark Java auf MapReduce ähnelt, und ich würde sagen, Sie können effizientere Crunch-Jobs in einer festen Zeit als m/r schreiben.

Andere Tipps

Wenn Sie Schritte für Spark auf einer RDD ausführen, beginnt dies nicht mit der Ausführung der Vorgänge, wenn auf die Daten zugegriffen werden müssen. Anstatt die Daten tatsächlich zu manipulieren, erstellt Spark ein Diagramm, wie man von den Daten übergeht, zu dem gewünschten Ergebnissatz und speichert keine Zwischendaten. Zum Beispiel, wenn Sie Folgendes in eine Shell eingeben

my_rdd = sc.parallelize(some_data)
mapped_data = my_rdd.map(...)
filtered_data = mapped_data.filter(...)
filtered_data.take(3)

Sie werden feststellen, dass beim Eingeben von Zeilen 2 und 3 keine Ausführung auftritt. Dies liegt daran, dass Spark nicht kartiert_data oder filtered_data erstellt, sondern ein Diagramm erstellt, wie man von my_rdd zu gefilterten Daten erhält. Der einzige Grund, warum Sie es wirklich auf diese Weise schreiben würden, ist, wenn Sie in einem späteren Zustand auf maped_data zugreifen müssen. In diesem Fall möchten Sie einen Cache verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top