Im Moment gibt es keine native Implementierung zum Schreiben des RDD in ein DBMS. Hier sind die Links zu den verwandten Diskussionen in der Spark-Benutzerliste:eins , zwei
Im Allgemeinen wäre der leistungsstärkste Ansatz der folgende:
- Validieren Sie die Anzahl der Partitionen in RDD, sie sollte nicht zu niedrig und nicht zu hoch sein. 20-50 Partitionen sollten in Ordnung sein, wenn die Zahl niedriger ist - rufen Sie
repartition
auf mit 20 Partitionen, falls höher - rufen Siecoalesce
auf bis 50 Partitionen - Rufen Sie die
mapPartition
auf Transformation, rufen Sie darin 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 dieses API , würde es Ihnen ermöglichen, die Notwendigkeit eines separaten Befehls für jeden Datensatz zu beseitigen - auf diese Weise würde die Einfügung viel schneller verarbeitet werden
Auf diese Weise würden Sie die Daten parallel in Postgres einfügen, indem Sie bis zu 50 parallele Verbindungen verwenden (abhängig von der Größe Ihres Spark-Clusters und seiner Konfiguration). Der gesamte Ansatz könnte als Java/Scala-Funktion implementiert werden, die das RDD und die Verbindungszeichenfolge
akzeptiert