PySpark:java.lang.OutofMemoryError:Java 堆空间

新手上路,请多包涵

我最近在具有 24 个 CPU 和 32GB RAM 的服务器上使用 PySpark 和 Ipython。它只在一台机器上运行。在我的过程中,我想收集大量数据,如下面的代码所示:

 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。我做了同样的事情,但似乎没有用。

原文由 pg2455 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

在尝试了大量配置参数后,我发现只有一个需要更改以启用更多堆空间,即 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 应用程序并重新运行它。您不会再遇到此错误。 :)

原文由 pg2455 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您正在寻找从脚本或 jupyter notebook 中设置它的方法,您可以执行以下操作:

 from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master('local[*]') \
    .config("spark.driver.memory", "15g") \
    .appName('my-cool-app') \
    .getOrCreate()

原文由 louis_guitton 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题