PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Insertion de données analytiques de Spark à Postgres

À 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 :

  1. 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 - appelez coalesce jusqu'à 50 partitions
  2. 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