В момента няма нативна реализация за запис на RDD в която и да е СУБД. Ето връзките към свързаните дискусии в потребителския списък на Spark:един , две
Като цяло най-ефективният подход би бил следният:
- Потвърдете броя на дяловете в RDD, той не трябва да е твърде малък или твърде висок. 20-50 дяла трябва да са добре, ако броят е по-малък - извикайте
repartition
с 20 дяла, ако е по-висок - извикайтеcoalesce
до 50 дяла - Извикайте
mapPartition
трансформация, вътре в него извикайте функцията за вмъкване на записите във вашата СУБД с помощта на JDBC. В тази функция отваряте връзката към вашата база данни и използвате командата COPY с този API , това ще ви позволи да елиминирате необходимостта от отделна команда за всеки запис - по този начин вмъкването ще се обработва много по-бързо
По този начин бихте вмъкнали данните в Postgres по паралелен начин, като използвате до 50 паралелни връзки (зависи от размера на клъстера на Spark и неговата конфигурация). Целият подход може да бъде приложен като функция на Java/Scala, приемаща RDD и низа за връзка