最近我一直在使用带有Ipython的PySpark,它运行在拥有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选项来避免OOMs。我也做了相同的事情,但它似乎没有起作用。