Rumah >Java >Isu dengan postgreSQL, cuba menyambungkan PySpark pada Jupyter Notebook pada Docker

Isu dengan postgreSQL, cuba menyambungkan PySpark pada Jupyter Notebook pada Docker

王林
王林ke hadapan
2024-02-11 20:00:111566semak imbas

editor php Youzi baru-baru ini menerima maklum balas daripada pengguna bahawa mereka menghadapi masalah semasa menggunakan Jupyter Notebook di Docker untuk menyambung ke PySpark. Masalah khusus ialah saya menghadapi beberapa masalah yang berkaitan dengan PostgreSQL semasa proses sambungan. Sebagai tindak balas kepada masalah ini, kami akan memberikan anda penyelesaian dan langkah operasi untuk membantu pengguna berjaya menyambung ke PySpark dan menyelesaikan masalah tersebut. Dalam artikel ini, kami akan memperkenalkan secara terperinci cara menggunakan Jupyter Notebook pada Docker untuk menyambung ke PySpark, dan memberikan penyelesaian kepada beberapa masalah biasa Kami berharap ia akan membantu semua orang.

Kandungan soalan

Saya mengalami masalah ini py4jjavaerror: 调用 o124.save 时发生错误。 :org.postgresql.util.psqlexception:与 localhost:5432 的连接被拒绝。检查主机名和端口是否正确,以及 postmaster 是否接受 tcp/ip 连接。 Apabila saya menjalankan kod pysark ini pada notebook jupyter dan menjalankan semuanya menggunakan docker, postgresql akan dipasang dalam mesin tempatan saya (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()

Saya cuba mengedit postgresql.conf untuk menambah "listen_addresses = 'localhost'" dan mengedit pg_hba.conf untuk menambah "host all all 0.0.0.0/0 md5" tetapi ia tidak berkesan untuk saya jadi saya tidak tahu apa yang perlu buat.

Penyelesaian

Saya juga menyelesaikan masalah memasang PostgreSQL pada docker (menggunakan imej ini https://hub.docker .com/_/postgres/ untuk mencipta bekas hanya untuk postgres) dan menggunakan arahan dalam bekas PySpark Buat rangkaian antara bekas postgreSQL

docker网络创建my_network,

Arahan ini adalah untuk bekas postgres

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

Ini untuk bekas Jupyter-pyspark

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

Atas ialah kandungan terperinci Isu dengan postgreSQL, cuba menyambungkan PySpark pada Jupyter Notebook pada Docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam