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)?
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:
repartition
mit 20 Partitionen auf, wenn höher - rufen Sie coalesce
auf 50 Partitionen auf 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 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
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%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%Tags und Links java postgresql apache-spark cassandra apache-spark-sql