web-dev-qa-db-fra.com

py4j.protocol.Py4JJavaError s'est produite lors de l'appel de z: org.Apache.spark.api.python.PythonRDD.collectAndServe

J'ai installé Apache-spark et pyspark sur ma machine (Ubuntu), et dans Pycharm, j'ai également mis à jour les variables d'environnement (par exemple spark_home, pyspark_python). J'essaye de faire:

import os, sys
os.environ['SPARK_HOME'] = ".../spark-2.3.0-bin-hadoop2.7"
sys.path.append(".../spark-2.3.0-bin-hadoop2.7/bin/pyspark/")
sys.path.append(".../spark-2.3.0-bin-hadoop2.7/python/lib/py4j-0.10.6-src.Zip")
from pyspark import SparkContext
from pyspark import SparkConf
sc = SparkContext('local[2]')
words = sc.parallelize(["scala", "Java", "hadoop", "spark", "akka"])
print(words.count())

Mais, je reçois des avertissements étranges:

py4j.protocol.Py4JJavaError: An error occurred while calling z:org.Apache.spark.api.python.PythonRDD.collectAndServe.
: Java.lang.IllegalArgumentException
at org.Apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.Apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.Apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.Apache.spark.util.ClosureCleaner$.getClassReader(ClosureCleaner.scala:46)
at org.Apache.spark.util.FieldAccessFinder$$anon$3$$anonfun$visitMethodInsn$2.apply(ClosureCleaner.scala:449)
at org.Apache.spark.util.FieldAccessFinder$$anon$3$$anonfun$visitMethodInsn$2.apply(ClosureCleaner.scala:432)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
at scala.collection.mutable.HashMap$$anon$1$$anonfun$foreach$2.apply(HashMap.scala:103)
at scala.collection.mutable.HashMap$$anon$1$$anonfun$foreach$2.apply(HashMap.scala:103)
at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230)
at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)
at scala.collection.mutable.HashMap$$anon$1.foreach(HashMap.scala:103)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
at org.Apache.spark.util.FieldAccessFinder$$anon$3.visitMethodInsn(ClosureCleaner.scala:432)
at org.Apache.xbean.asm5.ClassReader.a(Unknown Source)
at org.Apache.xbean.asm5.ClassReader.b(Unknown Source)
at org.Apache.xbean.asm5.ClassReader.accept(Unknown Source)
at org.Apache.xbean.asm5.ClassReader.accept(Unknown Source)
at org.Apache.spark.util.ClosureCleaner$$anonfun$org$Apache$spark$util$ClosureCleaner$$clean$14.apply(ClosureCleaner.scala:262)
at org.Apache.spark.util.ClosureCleaner$$anonfun$org$Apache$spark$util$ClosureCleaner$$clean$14.apply(ClosureCleaner.scala:261)
at scala.collection.immutable.List.foreach(List.scala:381)
at org.Apache.spark.util.ClosureCleaner$.org$Apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:261)
at org.Apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:159)
at org.Apache.spark.SparkContext.clean(SparkContext.scala:2292)
at org.Apache.spark.SparkContext.runJob(SparkContext.scala:2066)
at org.Apache.spark.SparkContext.runJob(SparkContext.scala:2092)
at org.Apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:939)
at org.Apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.Apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.Apache.spark.rdd.RDD.withScope(RDD.scala:363)
at org.Apache.spark.rdd.RDD.collect(RDD.scala:938)
at org.Apache.spark.api.python.PythonRDD$.collectAndServe(PythonRDD.scala:153)
at org.Apache.spark.api.python.PythonRDD.collectAndServe(PythonRDD.scala)
at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.base/Java.lang.reflect.Method.invoke(Method.Java:564)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.Java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.Java:357)
at py4j.Gateway.invoke(Gateway.Java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.Java:132)
at py4j.commands.CallCommand.execute(CallCommand.Java:79)
at py4j.GatewayConnection.run(GatewayConnection.Java:214)
at Java.base/Java.lang.Thread.run(Thread.Java:844)

Comment puis-je résoudre ce problème?

6
Saeid SOHEILY KHAH

En fait, j'ai trouvé une solution délicate. Pour résoudre le problème suivant:

Assurez-vous d'avoir correctement installé Py4j. Il est préférable de l'installer en utilisant une version officielle. Faire,

  1. téléchargez la dernière version officielle depuis https://pypi.org/project/py4j/ .

  2. décompressez/décompressez le fichier et accédez au répertoire nouvellement créé, par exemple cd py4j-0.x.

  3. courir

    Installation de Sudo Python (3) setup.py

Ensuite, rétrogradez votre Java vers la version 8 (auparavant, j'utilisais la version 10.). Pour ce faire, supprimez d'abord la version actuelle de Java en utilisant:

Sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*

puis installez Java 8 en utilisant:

Sudo apt install openjdk-8-jre-headless 

Maintenant, le code fonctionne correctement pour moi.

4
Saeid SOHEILY KHAH

J'avais deux versions de Java auparavant, Java8 et Java9. Lorsque j'ai supprimé Java9, le problème a été résolu.

1
Joon

Si vous utilisez anaconda, essayez: conda install -c cyclus Java-jdk

0
JL14

Je confirme également que la solution fonctionne sur Ubuntu 18.04 LTS.

J'ai eu un Java 10 installé et j'ai essayé d'exécuter les exemples Python de: http://spark.Apache.org/docs/2.3) .1 / , c'est-à-dire des choses aussi simples que:

./bin/spark-submit examples/src/main/python/pi.py 10

Cela n'a pas fonctionné!

Après avoir appliqué le correctif suggéré:

Sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*
Sudo apt autoremove
Sudo apt install openjdk-8-jre-headless

l'exemple a finalement fonctionné; Je veux dire si vous considérez que la bonne réponse est:

Pi est à peu près 3,142000

Merci pour la solution,
Bagvian

0
Bagvian