現時点では、RDDをDBMSに書き込むネイティブ実装はありません。 Sparkユーザーリストの関連するディスカッションへのリンクは次のとおりです。
一般に、最もパフォーマンスの高いアプローチは次のとおりです。
- RDDのパーティション数を検証します。少なすぎても多すぎてもいけません。数が少ない場合は、20〜50のパーティションで問題ありません-
repartition
を呼び出します 20パーティションの場合、それより高い場合はcoalesce
を呼び出します 50パーティションまで -
mapPartition
を呼び出します 変換では、その内部で関数を呼び出して、JDBCを使用してDBMSにレコードを挿入します。この関数では、データベースへの接続を開き、このAPI 、レコードごとに個別のコマンドを使用する必要がなくなります。これにより、挿入がはるかに高速に処理されます。
このようにして、最大50の並列接続を利用して並列方式でPostgresにデータを挿入します(Sparkクラスターのサイズとその構成によって異なります)。アプローチ全体は、RDDと接続文字列を受け入れるJava/Scala関数として実装される可能性があります