Por el momento, no existe una implementación nativa para escribir el RDD en ningún DBMS. Aquí están los enlaces a las discusiones relacionadas en la lista de usuarios de Spark:uno , dos
En general, el enfoque de mayor rendimiento sería el siguiente:
- Valide el número de particiones en RDD, no debe ser demasiado bajo ni demasiado alto. 20-50 particiones deberían estar bien, si el número es más bajo, llame a
repartition
con 20 particiones, si es mayor - llame acoalesce
hasta 50 particiones - Llama a la
mapPartition
transformación, dentro de ella llame a la función para insertar los registros en su DBMS usando JDBC. En esta función, abre la conexión a su base de datos y usa el comando COPY con esta API , le permitiría eliminar la necesidad de un comando separado para cada registro; de esta forma, la inserción se procesaría mucho más rápido
De esta manera, insertaría los datos en Postgres de manera paralela utilizando hasta 50 conexiones paralelas (depende del tamaño de su clúster Spark y su configuración). Todo el enfoque podría implementarse como una función de Java/Scala que acepte el RDD y la cadena de conexión