web-dev-qa-db-fra.com

ERREUR LORS DE L’UTILISATION de collect () dans PYSPARK

J'essaie de séparer le nom du site Web de l'URL. Par exemple, si l'URL est www.google.com, le résultat doit être "google". J'ai essayé le code ci-dessous et tout fonctionne bien sauf la dernière ligne - "websites.collect ()". 

J'ai utilisé un cadre de données pour stocker les noms de sites Web, puis l'a converti en un RDD et appliqué une fonction de scission sur les valeurs pour obtenir la sortie requise. 

La logique semble bien fonctionner, mais je suppose qu'il y a des erreurs dans la configuration et l'installation de mes paquets.

L'erreur est indiquée ci-dessous: -

---------------------------------------------------------------------------
Py4JJavaError                             Traceback (most recent call last)
<ipython-input-11-a88287400951> in <module>()
----> 1 websites.collect()

C:\ProgramData\Anaconda3\lib\site-packages\pyspark\rdd.py in collect(self)
    822         """
    823         with SCCallSiteSync(self.context) as css:
--> 824             port = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd())
    825         return list(_load_from_socket(port, self._jrdd_deserializer))
    826 

C:\ProgramData\Anaconda3\lib\site-packages\py4j\Java_gateway.py in __call__(self, *args)
   1158         answer = self.gateway_client.send_command(command)
   1159         return_value = get_return_value(
-> 1160             answer, self.gateway_client, self.target_id, self.name)
   1161 
   1162         for temp_arg in temp_args:

C:\ProgramData\Anaconda3\lib\site-packages\pyspark\sql\utils.py in deco(*a, **kw)
     61     def deco(*a, **kw):
     62         try:
---> 63             return f(*a, **kw)
     64         except py4j.protocol.Py4JJavaError as e:
     65             s = e.Java_exception.toString()

C:\ProgramData\Anaconda3\lib\site-packages\py4j\protocol.py in get_return_value(answer, gateway_client, target_id, name)
    318                 raise Py4JJavaError(
    319                     "An error occurred while calling {0}{1}{2}.\n".
--> 320                     format(target_id, ".", name), value)
    321             else:
    322                 raise Py4JError(

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(Unknown Source)
    at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at Java.base/Java.lang.reflect.Method.invoke(Unknown Source)
    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(Unknown Source)

CODE:-

from pyspark import SparkConf, SparkContext
conf = (SparkConf()
         .setMaster("local[*]")
         .setAppName("Test")
         .set("spark.executor.memory", "8g")
       )

sc = SparkContext(conf = conf)
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc) 

schemaWebsite = sc.parallelize([
    (0, "www.google.com"), (1, "www.hackerrank.com"),(2, "www.walmart.com/in"),
    (3, "www.Amazon.in"),(4, "www.ndtv.com")]).toDF(["id", "ev"])

websites = schemaWebsite.rdd.map(lambda x : x[1].split(".")[1])
websites.collect()
5
Anubhav Sarangi

Juste pour faire commenter @Anubhav Sarangi à cette question une réponse: J'ai eu le même problème. Au départ, j'ai installé Java SE 10.0.1. Mais eu une erreur similaire. Suivant la suggestion de @Anubhav Sarangi, j'ai téléchargé et installé le kit de développement Java SE 8u171 qui contient jdk 1.8 et le problème résolu. 

5
MhFarahani

J'ai eu le même problème, mais après avoir installé Java SE Development Kit 8u191 et sélectionné Java-8-jdk avec:

Sudo update-alternatives --config Java

il a disparu.

0
jeremy