Je pense que vous n'avez pas besoin de copier le pot postgres dans les esclaves car le programme pilote et le gestionnaire de cluster s'occupent de tout. J'ai créé une trame de données à partir d'une source externe Postgres de la manière suivante :
Télécharger le pilote jar postgres :
cd $HOME && wget https://jdbc.postgresql.org/download/postgresql-42.2.5.jar
Créer une trame de données :
atrribute = {'url' : 'jdbc:postgresql://{host}:{port}/{db}?user={user}&password={password}' \
.format(host=<host>, port=<port>, db=<db>, user=<user>, password=<password>),
'database' : <db>,
'dbtable' : <select * from table>}
df=spark.read.format('jdbc').options(**attribute).load()
Envoyer pour déclencher la tâche : Ajoutez le fichier jar téléchargé au chemin de classe du pilote lors de la soumission de la tâche Spark.
--properties spark.driver.extraClassPath=$HOME/postgresql-42.2.5.jar,spark.jars.packages=org.postgresql:postgresql:42.2.5