Heim >Java >Problem mit PostgreSQL beim Versuch, PySpark auf Jupyter Notebook auf Docker zu verbinden

Problem mit PostgreSQL beim Versuch, PySpark auf Jupyter Notebook auf Docker zu verbinden

王林
王林nach vorne
2024-02-11 20:00:111515Durchsuche

php-Editor Youzi erhielt kürzlich Feedback von Benutzern, dass bei der Verwendung von Jupyter Notebook auf Docker für die Verbindung mit PySpark Probleme aufgetreten seien. Das spezifische Problem besteht darin, dass ich während des Verbindungsprozesses auf einige Probleme im Zusammenhang mit PostgreSQL gestoßen bin. Als Reaktion auf dieses Problem stellen wir Ihnen Lösungen und Betriebsschritte zur Verfügung, die Benutzern helfen, sich erfolgreich mit PySpark zu verbinden und das Problem zu lösen. In diesem Artikel stellen wir detailliert vor, wie man mit Jupyter Notebook auf Docker eine Verbindung zu PySpark herstellt, und bieten Lösungen für einige häufig auftretende Probleme. Wir hoffen, dass es für alle hilfreich ist.

Frageninhalt

Ich hatte dieses Problem py4jjavaerror: 调用 o124.save 时发生错误。 :org.postgresql.util.psqlexception:与 localhost:5432 的连接被拒绝。检查主机名和端口是否正确,以及 postmaster 是否接受 tcp/ip 连接。 Wenn ich diesen Pysark-Code auf einem Jupyter-Notebook ausführe und alles mit Docker ausführe, wird Postgresql auf meinem lokalen Computer (Windows) installiert.

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()

Ich habe versucht, postgresql.conf zu bearbeiten, um „listen_addresses = ‚localhost‘“ hinzuzufügen, und pg_hba.conf zu bearbeiten, um „host all all 0.0.0.0/0 md5“ hinzuzufügen, aber es hat bei mir nicht funktioniert, also weiß ich nicht, was ich tun soll Tun.

Workaround

Ich habe auch das Problem gelöst, PostgreSQL auf Docker zu installieren (mit diesem Image https://hub.docker.com/_/postgres/, um einen Container nur für Postgres zu erstellen) und den Befehl im PySpark-Container zu verwenden Erstellen Sie ein Netzwerk zwischen dem PostgreSQL-Container

docker网络创建my_network,

Dieser Befehl gilt für den Postgres-Container

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

Dies ist für den Jupyter-Pyspark-Container

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

Das obige ist der detaillierte Inhalt vonProblem mit PostgreSQL beim Versuch, PySpark auf Jupyter Notebook auf Docker zu verbinden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen