我正在一個 Scala Spark 專案中作業,我們將資料從檔案加載到 PostgreSQL 中。它使用 jdbc.write 在獨立模式下本地運行良好,測驗資料很小。
但由于生產資料量很大,我想使用一個集群,它有多個作業人員,每個執行器有 1 個邏輯處理器核心。
考慮到這一點,我如何在集群中所有可用內核之間劃分資料?
謝謝!
PS:使用 Scala 2.13.9 和 Spark 3.3.0
uj5u.com熱心網友回復:
如果您正在使用動態分配并且您的集群被并發作業使用,則可能很難獲得與您的作業可能使用的核心數完全相同的磁區數,因為您不會預先知道這個數字并且您無法計算它是動態的。
您可以嘗試找出一些任意數字并將 numPartitions jdbc 引數設定為您要在寫入時使用的磁區數。使用此引數,Spark 將在寫入之前重新磁區此資料集,最終寫入的任務數將等于 numPartitions。請記住,并行撰寫的每個任務 = 1 個 jdbc 連接,因此請注意您可能會溢位 PostreSQL
Spark jdbc 檔案
numPartitions (none) 可用于表讀寫并行的最大磁區數。這也決定了最大并發 JDBC 連接數。如果要寫入的磁區數超過此限制,我們會在寫入前通過呼叫 coalesce(numPartitions) 將其減少到此限制。 讀/寫
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/515735.html
標籤:斯卡拉阿帕奇火花apache-spark-sqlapache-spark-数据集
