Java Objeto que no se puede llamar al usar chismes

Estoy tratando de usar Sparkmeausre para comprobar el rendimiento de mi código Pyspark. Estoy usando la edición de Pycharm Community en las ventanas 10, con Pyspark correctamente configurado. Yo hice "pip instalar chismes"y la chispa fue instalado con el debido tiempo. Ahora cuando estoy tratando de ejecutar este fragmento de código.

from pyspark import  SparkConf , SparkContext
from pyspark.context import  SparkContext
from pyspark.sql.session import  SparkSession
from sparkmeasure import StageMetrics


sc = SparkContext(master = "local" , appName = "sparkdemo")
spark = SparkSession(sc)
sm = StageMetrics(spark)

Estoy recibiendo el error.

File "C:/Users/nj123/PycharmProjects/pythonProject/sparkdemo.py", line 9, in 
sm = StageMetrics(spark)
File "C:\Users\nj123\PycharmProjects\pythonProject\venv\lib\site- 
packages\sparkmeasure\stagemetrics.py", line 15, in __init__
self.stagemetrics = self.sc._jvm.ch.cern.sparkmeasure.StageMetrics(self.sparksession._jsparkSession)
TypeError: 'JavaPackage' object is not callable

¿Cómo resolver este error y configurar la chispa a Pycharm correctamente?

Pregunta hecha hace 3 años, 4 meses, 27 días - Por byteexplorer


3 Respuestas:

  • Gracias a @user238607. Aquí están los pasos que he realizado para resolver este problema.

    1. First download Sparkmeasure jar file from Maven Central.
    
    2. Then move this jar file to the spark jar folder. Mine location was, C:\Spark\spark-3.0.1-bin-hadoop2.7\jars
    
    3. Now, Go to pycharm again, and rerun the same code.
    

    Enlace para descargar el archivo de tarro.

    Respondida el Dec 18, 2020 a las 14:25 - por algorithmarchitect

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando se debe a que estás intentando llamar a un objeto de tipo 'JavaPackage', pero ese objeto no es llamable, lo cual genera la excepción de TypeError.

    Para resolver este problema, puedes intentar modificar tu código de la siguiente manera:

    • En lugar de pasar el objeto `spark` de tipo `SparkSession` al constructor de `StageMetrics`, intenta pasar el objeto `sc` de tipo `SparkContext`.
    
    from pyspark import SparkConf, SparkContext
    from sparkmeasure import StageMetrics
    
    conf = SparkConf().setMaster("local").setAppName("sparkdemo")
    sc = SparkContext.getOrCreate(conf)
    
    sm = StageMetrics(sc)
    

    Intenta con este cambio y verifica si así puedes instanciar correctamente el objeto StageMetrics sin generar el error.

    Además, es importante tener en cuenta que si estás usando Spark en un entorno de PySpark, es posible que algunas funcionalidades específicas de Java no estén completamente integradas. Te recomiendo revisar la documentación de SparkMeasure y PySpark para obtener más información sobre la compatibilidad entre las dos bibliotecas.

    Respondida el Dec 19, 2020 a las 14:27 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Solución al error:

    El error se produce porque estás intentando llamar ch.cern.sparkmeasure.StageMetrics como una función, mientras que en realidad es un objeto Java. Para resolver esto, debes instanciarlo utilizando el operador new:

    
    self.stagemetrics = self.sc._jvm.ch.cern.sparkmeasure.StageMetrics.new(self.sparksession._jsparkSession)
    

    Configuración correcta de PyCharm para Spark:

    Para configurar PyCharm correctamente para Spark, sigue estos pasos:

    • Crea un nuevo proyecto: Crea un nuevo proyecto en PyCharm y selecciona "Python" como lenguaje.
    • Instala Spark: Instala Spark usando pip o conda. Puedes encontrar las instrucciones en el sitio web de Apache Spark.
    • Configura la ruta de Spark en PyCharm: En PyCharm, ve a "Archivo" > "Configuración" > "Intérprete de proyectos". Agrega la ruta a la carpeta de instalación de Spark al campo "Ruta del intérprete".
    • Crea una configuración de ejecución: En PyCharm, ve a "Ejecutar" > "Configuraciones de ejecución". Crea una nueva configuración y selecciona "Python" como tipo. En el campo "Script", ingresa el script de Python que deseas ejecutar. En el campo "Intérprete", selecciona el intérprete de Spark que configuraste en el paso anterior.

    Código actualizado:

    
    from pyspark import SparkConf, SparkContext
    from pyspark.sql.session import SparkSession
    from sparkmeasure import StageMetrics
    
    sc = SparkContext(master="local", appName="sparkdemo")
    spark = SparkSession(sc)
    sm = StageMetrics(spark)
    

    Ejecución del código:

    Ahora puedes ejecutar tu código desde PyCharm utilizando la configuración de ejecución que creaste. Asegúrate de que la chispa está activa en tu máquina antes de ejecutar el código.

    Respondida el Dec 19, 2020 a las 14:27 - por Gemini

    Votos positivos: 0 | Votos negativos: 0