序列化任務太大

在Databricks中了解當序列化任務太大時該怎麼辦。

寫的亞當Pavlacka

最後發布時間:2022年5月11日

如果看到以下錯誤消息,則可以通過更改火花配置AWS|Azure)時啟動集群。

序列化任務XXX:XXX為XXX字節,超過了允許的最大值:spark.rpc.message.maxSize (XXX字節)。考慮增加spark.rpc.message.maxSize,或者對較大的值使用廣播變量。

更改火花配置,設置屬性:

spark.rpc.message.maxSize

雖然調優配置是一種選擇,但通常這種錯誤消息意味著你將一些大的對象從驅動程序發送到執行程序,例如,用一個大列表調用parallelize,或將一個大的R DataFrame轉換為Spark DataFrame。

如果是這樣,我們建議首先審計您的代碼,以刪除您使用的大型對象,或利用廣播變量代替。如果這不能解決這個錯誤,您可以增加分區編號,將大列表拆分為多個小列表,以減少Spark RPC消息的大小。

下麵是Python和Scala的例子:

Python

largeList =[…]#如果需要,增加rdd = sc.parallelize(largeList, partitionNum) ds = rdd. tods ()
刪除

Scala

val largeList = Seq(…)//這是一個大列表val partitionNum = 100 //如果需要增加這個數字val rdd = sc.parallelize(largeList, partitionNum) val ds = rdd. tods ()
刪除

R用戶需要增加Spark配置spark.default.parallelism在集群初始化時增加分區數。創建集群後,不能設置該配置。