Al momento non esiste un'implementazione nativa della scrittura dell'RDD su alcun DBMS. Di seguito sono riportati i collegamenti alle discussioni correlate nell'elenco utenti Spark:uno , due
In generale, l'approccio più efficace sarebbe il seguente:
- Convalida il numero di partizioni in RDD, non dovrebbe essere né troppo basso né troppo alto. 20-50 partizioni dovrebbero andare bene, se il numero è inferiore - chiama
repartition
con 20 partizioni, se superiore - chiamacoalesce
fino a 50 partizioni - Chiama la
mapPartition
trasformazione, al suo interno chiama la funzione per inserire i record nel tuo DBMS usando JDBC. In questa funzione apri la connessione al tuo database e usi il comando COPY con questa API , ti consentirebbe di eliminare la necessità di un comando separato per ogni record, in questo modo l'inserimento verrebbe elaborato molto più velocemente
In questo modo inseriresti i dati in Postgres in modo parallelo utilizzando fino a 50 connessioni parallele (dipende dalle dimensioni del tuo cluster Spark e dalla sua configurazione). L'intero approccio potrebbe essere implementato come una funzione Java/Scala che accetta l'RDD e la stringa di connessione