2015-01-13 11 views

Antwort

3

Nein, eine RDD ist an eine einzige SparkContext gebunden. Die allgemeine Idee ist, dass Sie ein Spark-Cluster und ein Treiberprogramm haben, das dem Cluster mitteilt, was zu tun ist. Dieser Treiber würde die SparkContext und Kick-off-Operationen auf den RDDs haben.

Wenn Sie eine RDD einfach von einem Treiberprogramm in ein anderes verschieben möchten, besteht die Lösung darin, sie auf den Datenträger (S3/HDFS/...) im ersten Treiber zu schreiben und sie vom Datenträger in den anderen Treiber zu laden.

11

Wie bereits von Daniel Darabos gesagt, ist es nicht möglich. Jedes verteilte Objekt in Spark ist an einen bestimmten Kontext gebunden, der zum Erstellen verwendet wurde (SparkContext im Fall von RDD, SQLContext im Falle des DataFrame Datensatzes). Wenn Sie Objekte zwischen Anwendungen teilen möchten, müssen Sie gemeinsame Kontexte verwenden (siehe zum Beispiel spark-jobserver, Livy oder Apache Zeppelin). Seit RDD oder DataFrame ist nur ein kleines lokales Objekt gibt es wirklich nicht viel zu teilen.

Das Teilen von Daten ist ein völlig anderes Problem. Sie können spezialisiert in Speicher-Cache (Apache Ignite) oder in Speicher-Dateisystem (wie Alluxio - ehemalige Tachyon) verteilt werden, um die Latenz beim Umschalten zwischen Anwendung zu minimieren, aber Sie können es nicht wirklich vermeiden.

0

Sie können nativ RDD nach meinem Verständnis nicht Daten, sondern eine Möglichkeit, Daten über Transformationen/Filter aus Originaldaten zu erstellen.

Eine andere Idee ist, die endgültigen Daten stattdessen zu teilen. So speichert man die RDD in einem Datenspeicher, wie zum Beispiel: - HDFS (Parkett Datei etc ..) - Elasticsearch - Apache Ignite (in-memory)

ich glaube, Sie Apache Ignite lieben : https://ignite.apache.org/features/igniterdd.html

Apache Entzünden stellt eine Implementierung der Funken RDD Abstraktion, die leicht zu teilen Zustand im Speicher über mehrere Funken ermöglichen Jobs, entweder innerhalb der gleichen Anwendung oder zwischen unterschiedlichen Funken Anwendungen.

IgniteRDD implementiert ist, ist als eine Ansicht über einen Cache verteilt Entzünden, , die entweder innerhalb des Funken Job ausführenden Prozesses eingesetzt werden kann, oder auf einer Funkenarbeiter oder in seinem eigenen Cluster.

(Ich lasse Sie ihre Dokumentation graben zu finden, was Sie suchen.)

Verwandte Themen