2015-06-25 80 views
22

我正在使用Spark 1.4進行我的研究並正在努力處理內存設置。我的機器有16GB內存,所以沒有問題,因爲我的文件大小隻有300MB。雖然,當我嘗試使用toPandas()功能我收到以下錯誤星火RDD轉換成數據幀熊貓:Spark 1.4增加maxResultSize內存

serialized results of 9 tasks (1096.9 MB) is bigger than spark.driver.maxResultSize (1024.0 MB) 

我試圖解決這個改變火花-config文件,並仍然得到同樣的錯誤。我聽說這是Spark 1.4的一個問題,並且懷疑你是否知道如何解決這個問題。任何幫助深表感謝。

回答

32

您可以設置在SparkConf對象spark.driver.maxResultSize參數:

from pyspark import SparkConf, SparkContext 

# In Jupyter you have to stop the current context first 
sc.stop() 

# Create new config 
conf = (SparkConf() 
    .set("spark.driver.maxResultSize", "2g")) 

# Create new context 
sc = SparkContext(conf=conf) 

你或許應該創建一個新的SQLContext還有:

from pyspark.sql import SQLContext 
sqlContext = SQLContext(sc) 
4

看起來你正在收集RDD,所以它肯定會收集所有的數據到驅動程序節點,這就是爲什麼你面臨這個問題。 如果不需要rdd,或者必要時指定spark.driver.maxResultSize,您必須避免收集數據。有兩種方式定義此變量

1 - create Spark Config by setting this variable as
conf.set("spark.driver.maxResultSize", "3g")
2 - or set this variable in spark-defaults.conf file present in conf folder of spark. like spark.driver.maxResultSize 3g and restart the spark.

+0

我沒有設置在配置文件中的變量,並重新啓動了火花,但仍然得到同樣的錯誤。 – ahajib

+0

你有沒有試過第一個解決方案? –

+0

它適合我,但應該像你提到的臨時解決方案;)以任何方式感謝你 –

14

在命令行的,如與pyspark,--conf spark.driver.maxResultSize=3g也可用於增加最大結果的大小。

5

調整spark.driver.maxResultSize考慮到運行環境是一種很好的做法。但是,這不是解決您的問題的方法,因爲數據量可能會隨時間而改變。正如@ Zia-Kayani所說,明智地收集數據會更好。所以,如果你有一個DataFrame df,那麼你可以撥打df.rdd,並在集羣上做所有的魔術,而不是在驅動程序中。但是,如果您需要收集數據,我會建議:

  • 請勿打開spark.sql.parquet.binaryAsString。字符串對象佔用更多空間
  • 使用spark.rdd.compress在收集它們時壓縮RDD
  • 嘗試使用分頁來收集它。 (代碼Scala中,從另一個答案Scala: How to get a range of rows in a dataframe

    long count = df.count() int limit = 50; while(count > 0){ df1 = df.limit(limit); df1.show(); //will print 50, next 50, etc rows df = df.except(df1); count = count - limit; }

1

也有星火錯誤 https://issues.apache.org/jira/browse/SPARK-12837 給出了同樣的錯誤

serialized results of X tasks (Y MB) is bigger than spark.driver.maxResultSize 

即使你可能無法提取數據的驅動器明確。

SPARK-12837解決了Spark Spark之前的累加器/廣播變量被驅動到驅動程序不必要引發此問題的Spark錯誤。

0

同時開始作業或終端,你可以使用

--conf spark.driver.maxResultSize="0" 

消除這個瓶頸