À l'heure actuelle, il n'existe aucune implémentation native de l'écriture du RDD dans un SGBD. Voici les liens vers les discussions connexes dans la liste des utilisateurs de Spark :un , deux
En général, l'approche la plus performante serait la suivante :
- Validez le nombre de partitions dans RDD, il ne doit pas être trop bas et trop haut. 20 à 50 partitions devraient suffire, si le nombre est inférieur - appelez
repartition
avec 20 partitions, si supérieur - appelezcoalesce
jusqu'à 50 partitions - Appelez la
mapPartition
transformation, à l'intérieur de celle-ci, appelez la fonction pour insérer les enregistrements dans votre SGBD à l'aide de JDBC. Dans cette fonction, vous ouvrez la connexion à votre base de données et utilisez la commande COPY avec cette API , cela vous permettrait d'éliminer le besoin d'une commande distincte pour chaque enregistrement - de cette façon, l'insertion serait traitée beaucoup plus rapidement
De cette façon, vous insérez les données dans Postgres de manière parallèle en utilisant jusqu'à 50 connexions parallèles (selon la taille de votre cluster Spark et sa configuration). L'ensemble de l'approche peut être implémenté sous la forme d'une fonction Java/Scala acceptant le RDD et la chaîne de connexion