[英]PySpark: java.lang.OutofMemoryError: Java heap space
我最近在我的服務器上使用 PySpark 和 Ipython,它有 24 個 CPU 和 32GB RAM。 它只在一台機器上運行。 在我的過程中,我想收集以下代碼中給出的大量數據:
train_dataRDD = (train.map(lambda x:getTagsAndText(x))
.filter(lambda x:x[-1]!=[])
.flatMap(lambda (x,text,tags): [(tag,(x,text)) for tag in tags])
.groupByKey()
.mapValues(list))
當我做
training_data = train_dataRDD.collectAsMap()
它給了我 outOfMemory 錯誤。 Java heap Space
。 此外,在出現此錯誤后,我無法對 Spark 執行任何操作,因為它與 Java 失去了連接。 它給出了Py4JNetworkError: Cannot connect to the java server
。
看起來堆空間很小。 如何將其設置為更大的限制?
編輯:
我在運行之前嘗試過的事情: sc._conf.set('spark.executor.memory','32g').set('spark.driver.memory','32g').set('spark.driver.maxResultsSize','0')
我根據此處的文檔更改了 spark 選項(如果您執行 ctrl-f 並搜索 spark.executor.extraJavaOptions): http ://spark.apache.org/docs/1.2.1/configuration.html
它說我可以通過設置 spark.executor.memory 選項來避免 OOM。 我做了同樣的事情,但似乎不起作用。
在嘗試了大量配置參數后,我發現只需要更改一個即可啟用更多 Heap 空間,即spark.driver.memory
。
sudo vim $SPARK_HOME/conf/spark-defaults.conf
#uncomment the spark.driver.memory and change it according to your use. I changed it to below
spark.driver.memory 15g
# press : and then wq! to exit vim editor
關閉現有的 Spark 應用程序並重新運行它。 您不會再次遇到此錯誤。 :)
如果您正在尋找從腳本或 jupyter 筆記本中設置它的方法,您可以執行以下操作:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.master('local[*]') \
.config("spark.driver.memory", "15g") \
.appName('my-cool-app') \
.getOrCreate()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.