För närvarande finns det ingen inbyggd implementering av att skriva RDD till något DBMS. Här är länkarna till relaterade diskussioner i Spark-användarlistan:ett , två
I allmänhet skulle det mest effektiva tillvägagångssättet vara följande:
- Verifiera antalet partitioner i RDD, det bör inte vara för lågt och för högt. 20-50 partitioner borde vara bra, om antalet är lägre - ring
repartition
med 20 partitioner, om högre - anropcoalesce
till 50 partitioner - Anropa
mapPartition
transformation, inuti den anropar funktionen för att infoga posterna i ditt DBMS med JDBC. I den här funktionen öppnar du anslutningen till din databas och använder kommandot COPY med detta API , det skulle tillåta dig att eliminera behovet av ett separat kommando för varje post - på så sätt skulle infogningen bearbetas mycket snabbare
På detta sätt skulle du infoga data i Postgres på ett parallellt sätt med upp till 50 parallella anslutningar (beror på din Spark-klusterstorlek och dess konfiguration). Hela tillvägagångssättet kan implementeras som en Java/Scala-funktion som accepterar RDD:n och anslutningssträngen