Einfügen von Analytic-Daten von Spark nach Postgres

8

Ich habe eine Cassandra-Datenbank, von der ich die Daten mit SparkSQL über Apache Spark analysiert habe. Jetzt möchte ich diese analysierten Daten in PostgreSQL einfügen. Gibt es irgendwelche Möglichkeiten, dies direkt zu erreichen, abgesehen von der Verwendung des PostgreSQL-Treibers (ich habe es mit Hilfe von postREST und Driver erreicht, ich möchte wissen, ob es Methoden wie saveToCassandra() gibt)?

    
Justin 03.02.2015, 12:17
quelle

3 Antworten

13

Momentan gibt es keine native Implementierung des Schreibens der RDD in ein DBMS. Hier finden Sie die Links zu den zugehörigen Diskussionen in der Spark-Benutzerliste: eins , zwei

Im Allgemeinen wäre der performanteste Ansatz folgender:

  1. Überprüfen Sie die Anzahl der Partitionen in RDD, es sollte nicht zu niedrig und zu hoch sein. 20-50 Partitionen sollten in Ordnung sein, wenn die Anzahl niedriger ist - rufen Sie repartition mit 20 Partitionen auf, wenn höher - rufen Sie coalesce auf 50 Partitionen auf
  2. Rufen Sie die mapPartition -Umwandlung auf, rufen Sie die Funktion auf, um die Datensätze mit JDBC in Ihr DBMS einzufügen. In dieser Funktion öffnen Sie die Verbindung zu Ihrer Datenbank und verwenden den COPY-Befehl mit dieser API , würde es Ihnen ermöglichen, die Notwendigkeit für einen separaten Befehl für jeden Datensatz zu beseitigen - auf diese Weise würde die Einfügung viel schneller
  3. verarbeitet werden

Auf diese Weise würden Sie die Daten parallel in Postgres einfügen und dabei bis zu 50 parallele Verbindungen verwenden (abhängig von Ihrer Spark-Cluster-Größe und ihrer Konfiguration). Der gesamte Ansatz könnte als eine Java / Scala-Funktion implementiert werden, die RDD und die Verbindungszeichenfolge akzeptiert

    
0x0FFF 03.02.2015, 15:33
quelle
1

Antwort von 0x0FFF ist gut. Hier ist ein zusätzlicher Punkt, der nützlich wäre.

Ich verwende foreachPartition , um den externen Speicher beizubehalten. Dies steht auch in Einklang mit dem in der Spark-Dokumentation angegebenen Entwurfsmuster Design Patterns for using foreachRDD Ссылка

Beispiel:

%Vor%     
jsr 22.03.2015 06:08
quelle
1

Sie können Postgres copy api verwenden, um es zu schreiben, es ist viel schneller so. Siehe die folgenden zwei Methoden - eine iteriert über RDD, um den Puffer zu füllen, der von copy api gespeichert werden kann. Einzige Sache, um die Sie sich kümmern müssen, ist das Erstellen korrekter Anweisungen im CSV-Format, die von copy api verwendet werden.

%Vor%     
smishra 26.05.2015 23:00
quelle