Maison >Java >Problème avec postgreSQL, tentative de connexion de PySpark sur Jupyter Notebook sur Docker

Problème avec postgreSQL, tentative de connexion de PySpark sur Jupyter Notebook sur Docker

王林
王林avant
2024-02-11 20:00:111447parcourir

L'éditeur php Youzi a récemment reçu des commentaires d'utilisateurs indiquant qu'ils rencontraient des problèmes lors de l'utilisation de Jupyter Notebook sur Docker pour se connecter à PySpark. Le problème spécifique est que j'ai rencontré des problèmes liés à PostgreSQL lors du processus de connexion. En réponse à ce problème, nous vous fournirons des solutions et des étapes opérationnelles pour aider les utilisateurs à se connecter avec succès à PySpark et à résoudre le problème. Dans cet article, nous présenterons en détail comment utiliser Jupyter Notebook sur Docker pour se connecter à PySpark et fournirons des solutions à certains problèmes courants. Nous espérons que cela sera utile à tout le monde.

Contenu de la question

J'ai eu ce problème py4jjavaerror: 调用 o124.save 时发生错误。 :org.postgresql.util.psqlexception:与 localhost:5432 的连接被拒绝。检查主机名和端口是否正确,以及 postmaster 是否接受 tcp/ip 连接。 Lorsque j'exécute ce code pysark sur le notebook jupyter et que j'exécute tout à l'aide de docker, postgresql est installé sur ma machine locale (windows).

from pyspark.sql import SparkSession
from pyspark.sql.functions import lit, col, explode
import pyspark.sql.functions as f

spark = SparkSession.builder.appName("ETL Pipeline").config("spark.jars", "./postgresql-42.7.1.jar").getOrCreate()
df = spark.read.text("./Data/WordData.txt")

df2 = df.withColumn("splitedData", f.split("value"," "))
df3 = df2.withColumn("words", explode("splitedData"))
wordsDF = df3.select("words")
wordCount = wordsDF.groupBy("words").count()

driver = "org.postgresql.Driver"
url = "jdbc:postgresql://localhost:5432/local_database"
table = "word_count"
user = "postgres"
password = "12345"

wordCount.write.format("jdbc") \
    .option("driver", driver) \
    .option("url", url) \
    .option("dbtable", table) \
    .option("mode", "append") \
    .option("user", user) \
    .option("password", password) \
    .save()

spark.stop()

J'ai essayé de modifier postgresql.conf pour ajouter "listen_addresses = 'localhost'" et de modifier pg_hba.conf pour ajouter "host all all 0.0.0.0/0 md5" mais cela n'a pas fonctionné pour moi donc je ne sais pas quoi faire faire.

Solution

J'ai également résolu le problème de l'installation de PostgreSQL sur Docker (en utilisant cette image https://hub.docker .com/_/postgres/ pour créer un conteneur uniquement pour postgres) et en utilisant la commande dans le conteneur PySpark Créez un réseau entre le conteneur postgreSQL

docker网络创建my_network,

Cette commande est destinée au conteneur Postgres

docker run --name postgres_container --network my_network -e POSTGRES_PASSWORD=12345 -d -p 5432:5432 postgres:latest

Ceci est pour le conteneur Jupyter-pyspark

docker run --name jupyter_container --network my_network -it -p 8888:8888 -v C:homeworkpath:/home/jovyan/work jupyter/pyspark-notebook:latest

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer