我試圖用Spark DF從Hive中讀取資料,并將其分配到特定的可配置的磁區數量中(與核心數量相關)。我的作業非常簡單,它不包含任何連接或聚合。我已經閱讀了spark.sql.shuffle.partitions屬性,但檔案中說:
配置在為連接或聚合而洗刷資料時要使用的磁區的數量。
這是否意味著我配置這個屬性是不相關的?或者說,讀取操作被認為是一種洗牌?如果不是,有什么替代方案嗎?重新磁區和聯合似乎有點兒矯枉過正。
uj5u.com熱心網友回復:
為了驗證我對你的問題的理解,你想在你的rdd/dataframe中增加磁區的數量,這是在讀取資料后立即創建的。
在這種情況下,你所追求的屬性是spark.sql.files.maxPartitionBytes,它控制了一個磁區中可以推送的最大資料量(請參考https://spark.apache.org/docs/2.4.0/sql-performance-tuning.html)
默認值是128MB,可以被覆寫以提高并行性。
uj5u.com熱心網友回復:
讀取并不是這樣的洗牌。你需要在某個階段把資料送進去。
下面的答案可以讓我們來看看。
可以使用下面的答案,也可以使用Spark的演算法,在讀取時設定磁區的數量。
您沒有說明您是使用 RDD 還是 DF。使用 RDD,你可以設定磁區數量。對于DF,你需要在一般情況下在讀取后重新磁區。
正如你所注意到的,你關于控制并行性的觀點在連接或聚合時不太相關。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/332769.html
標籤:
