W tej chwili nie ma natywnej implementacji zapisu RDD do żadnego DBMS. Oto linki do powiązanych dyskusji na liście użytkowników Spark:jeden , dwa
Ogólnie rzecz biorąc, najbardziej wydajne podejście byłoby następujące:
- Zweryfikuj liczbę partycji w RDD, nie powinna być zbyt niska ani zbyt wysoka. 20-50 partycji powinno wystarczyć, jeśli liczba jest mniejsza - zadzwoń do
repartition
z 20 partycjami, jeśli wyższe - zadzwońcoalesce
do 50 partycji - Wywołaj
mapPartition
transformacji, wewnątrz niej wywołaj funkcję wstawiania rekordów do systemu DBMS za pomocą JDBC. W tej funkcji otwierasz połączenie z bazą danych i używasz polecenia COPY z ten interfejs API , pozwoliłoby to wyeliminować potrzebę oddzielnego polecenia dla każdego rekordu - w ten sposób wstawianie byłoby przetwarzane znacznie szybciej
W ten sposób możesz wstawić dane do Postgres w sposób równoległy, wykorzystując do 50 połączeń równoległych (w zależności od rozmiaru klastra Spark i jego konfiguracji). Całe podejście można zaimplementować jako funkcję Java/Scala akceptującą RDD i ciąg połączenia