No momento, não há implementação nativa de escrever o RDD em nenhum SGBD. Aqui estão os links para as discussões relacionadas na lista de usuários do Spark:um , dois
Em geral, a abordagem com melhor desempenho seria a seguinte:
- Valide o número de partições no RDD, não deve ser muito baixo e nem muito alto. 20-50 partições devem estar bem, se o número for menor - chame
repartition
com 20 partições, se maior - chamecoalesce
para 50 partições - Chame a
mapPartition
transformação, dentro dela chame a função para inserir os registros em seu DBMS usando JDBC. Nesta função você abre a conexão com seu banco de dados e usa o comando COPY com esta API , isso permitiria que você eliminasse a necessidade de um comando separado para cada registro - desta forma a inserção seria processada muito mais rápido
Dessa forma, você inseriria os dados no Postgres de maneira paralela utilizando até 50 conexões paralelas (depende do tamanho do cluster Spark e de sua configuração). Toda a abordagem pode ser implementada como uma função Java/Scala aceitando o RDD e a string de conexão