2016-03-03 69 views
1

我很喜歡使用Spark sql,但之前遇到過一個問題。 由於每個分區的RDD大小限制,Spark sql會吐出以下錯誤消息; (INT_MAX)。我可以用SQL語句指定並行度嗎?

16/03/03 15:41:20 INFO TaskSetManager: Lost task 142.2 in stage 4.0 (TID 929) on executor 10.1.100.116: java.lang.RuntimeException (java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE 
    at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:828) 
    at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:125) 
    at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:113) 
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1206) 
    at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:127) 

所以我想增加每個RDD的分區數來解決這個問題。我可以在Spark sql中調整它們嗎?

回答

1

爲什麼要增加分區數量? 通常(並且經常)Spark根據您的羣集(或本地計算機)功能選擇適當數量的分區。

如果你看看here:「通常情況下,星火嘗試設置分區的數量自動根據您的集羣。但是,您也可以手動設置它...。」

從我個人的經驗,增加了數量並不總是會導致處理效率的提高,除非數據集很小(它適合機器的內存),並且機器具有可用空閒內核來處理新分區。

關於你的問題,有一個名爲spark.default.parallelism,您可以設置來控制並行性級別配置屬性,你可以找到它here,並here你可以找到關於決定分區的數量默認星火行爲的說明。

手動設置分區數量可能會很棘手,並且不靈活(在不同的機器或集羣上執行應用程序時,必須確保調整此數字)。

相關問題