取消
顯示的結果
而不是尋找
你的意思是:

得到錯誤而拚花的數據加載到Postgres(使用spark-postgres庫)ClassNotFoundException:沒有找到數據來源:Postgres。請在http://spark.apache.org/third-party-projects.html上找到包造成的:ClassNotFoundException

資源管理器
新的貢獻者三世

嗨,夥計們,我要拚花(GCS位置)數據加載到Postgres數據庫(穀歌雲)。我們使用批量上傳數據到PG (spark-postgres庫)

https://framagit.org/interhop/library/spark-etl/-/tree/master/spark-postgres/src/main/scala/io/frama..。

前必要的——使用圖書館,我上傳jar集群

1 -https://mvnrepository.com/artifact/io.frama.parisni/spark-postgres/0.0.1

2 -https://mvnrepository.com/artifact/org.postgresql/postgresql

% scala

val數據= spark.read.format (“postgres”)

.option (“url”、“postgres jdbc:: / / IP端口/數據庫?用戶= USERNAME¤tSchema = SCHEMANAME”)

.option(“密碼”,“密碼”)

.option(“查詢”、“select * from表”)

.option(“分區”,4)

.option (“numSplits”, 5)

.option(“多行”,真的)

.load

但這是給錯誤- - - - - -

ClassNotFoundException:沒有找到數據來源:postgres。請找到包http://spark.apache.org/third-party-projects.html引起的:ClassNotFoundException: postgres.DefaultSource

P。S -因為我的數據是巨大的,我需要使用批量加載操作以來通過jdbc連接並通過光標插入批不是最佳的方法。

讓我知道如果有任何其他方法用於批量插入。

數據大小~ 40 GB的拚花

問候,

6個回答6

daniel_sahal
尊敬的貢獻者三世

隻是一個僥幸的猜測……也許spark-postgres圖書館沒有正確安裝?再次嚐試刪除jar並上傳它。

如果這不起作用,試圖取代spark.read.format (“postgres”)

spark.read.format (“io.frama.parisni.spark.postgres.DataSource”)

Kaniz
社區經理
社區經理

嗨@Deepak U(客戶),我們還沒有聽到來自你自從上次反應@Daniel薩哈(客戶),我檢查,看看他的建議幫助你。

否則,如果你有任何解決方案,請與社區分享,因為它可以幫助別人。

同時,請別忘了點擊“選擇最佳”按鈕時提供的信息幫助解決你的問題。

資源管理器
新的貢獻者三世

嗨@Kaniz Fatma和@Daniel薩哈,謝謝你伸出手,很感激。

幫助您理解上下文背景。

問題陳述,

我們麵臨的性能問題在Postgres數據加載從GCS存儲(拚花格式)。數據加載完成在2部分。

首先創建postgres intermediate_table通過閱讀gc數據作為火花dataframe表並將其保存在postgres。

然後從中間加載到主數據表(有一些邏輯),我們已經實現了代碼和更小的數據集工作正常

但當涉及到大型數據集,它是構成問題。

我們確保沒有約束Postgres中間表中也有一個PK Postgres主要表合並功能。Postgres也豐富。

闡述以上表示的代碼片段。

階段1 - >

創建Postgres中間表(持久表)通過寫數據幀火花在Postgres表(覆蓋模式)從數據存儲在gc(拚花25 - 30 GB的數據格式~卷,部分文件總數- 71)

代碼片段,

df.write.mode(“覆蓋”)。選項(“numPartitions”,數量).format (jdbc)。選項(“url”, url)。選項(“數據表”數據表)。選項(“用戶”,user_nm) .option(“密碼”,passwrd) .save ()

第二階段- >插入Postgres中間表(在步驟1中創建的)數據主要Postgres表(持續)通過insert語句(SCD 1型)。

代碼

片段,

插入main_tab(從intermediate_table選擇列)衝突的東西做更新

Postgres和磚資源的詳細信息

附上屏幕截圖

databricks_resource

postgres_resource

試著選擇,

  1. 我們保證使用maxfilepertrigger batchsize, num分區選項在上麵的代碼來攝取大量數據。

然後我們看到spark-postgres選項,嚐試下麵的方法

選項1 -寫作dataframe和給選項為“postgres”前write.format (“postgres”)

與——ClassNotFoundException失敗:沒有找到數據來源:postgres。請查收包裹

選項2 -我們正在低水平pyspark API中建議的那樣spark-postgres-library (ex - sc._jvm.io.frama.parisni.PGUtil)但是

PGutil不可用在代碼中

我們用postgressql嚐試。司機,但它沒有工作

https://docs.m.eheci.com/external-data/postgresql.html

問候,

daniel_sahal
尊敬的貢獻者三世

@Deepak U

很難找到一個答案不適當的監控整個過程。

首先,我將檢查工人們如何在運行時(Ganglia -的整體使用工人,瓶頸在哪裏。它可以更有效更強大的節點數量小於多個不太強大的。

第二件事——網絡。也許有一個瓶頸在那裏?檢查的價值。

第三件事- Postgres實例在運行時監控。

第四件事,值得考慮出口拚花文件到存儲的數據,然後使用複製從Postgres導入數據。它通常比使用JDBC。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map