嗨,夥計們,我要拚花(GCS位置)數據加載到Postgres數據庫(穀歌雲)。我們使用批量上傳數據到PG (spark-postgres庫)
前必要的——使用圖書館,我上傳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的拚花
問候,
嗨@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和磚資源的詳細信息
附上屏幕截圖
試著選擇,
然後我們看到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
問候,