web-dev-qa-db-fra.com

PySpark: Java.lang.OutofMemoryError: Espace de pile Java

J'utilise PySpark avec Ipython récemment sur mon serveur avec 24 processeurs et 32 ​​Go de RAM. Il ne fonctionne que sur une seule machine. Dans mon processus, je souhaite collecter une quantité énorme de données, comme indiqué dans le code ci-dessous:

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))

Quand je fais 

training_data =  train_dataRDD.collectAsMap()

Il me donne outOfMemory Error. Java heap Space. De plus, je ne peux effectuer aucune opération sur Spark après cette erreur car il perd la connexion avec Java. Cela donne Py4JNetworkError: Cannot connect to the Java server.

Il semble que l'espace de tas est petit. Comment puis-je le fixer à de plus grandes limites? 

MODIFIER:

Choses que j'ai essayées avant de lancer: sc._conf.set('spark.executor.memory','32g').set('spark.driver.memory','32g').set('spark.driver.maxResultsSize','0')

J'ai changé les options d'allumage selon la documentation ici (si vous faites ctrl-f et cherchez spark.executor.extraJavaOptions): http://spark.Apache.org/docs/1.2.1/configuration.html

Il dit que je peux éviter les MOO en définissant l'option spark.executor.memory. J'ai fait la même chose mais cela ne semble pas fonctionner.

25
pg2455

Après avoir essayé des charges de paramètres de configuration, j’ai constaté qu’il ne fallait en changer qu’un pour permettre plus d’espace Heap et, par exemple, 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

Fermez votre application spark existante et relancez-la. Vous ne rencontrerez plus cette erreur. :)

36
pg2455

J'ai eu le même problème avec pyspark (installé avec brew). Dans mon cas, il a été installé sur le chemin /usr/local/Cellar/Apache-spark.

Le seul fichier de configuration que j'avais était en Apache-spark/2.4.0/libexec/python//test_coverage/conf/spark-defaults.conf.

Comme suggéré ici , j'ai créé le fichier spark-defaults.conf dans le chemin /usr/local/Cellar/Apache-spark/2.4.0/libexec/conf/spark-defaults.conf et y ai ajouté la ligne spark.driver.memory 12g.

0
Francesco Boi