【问题标题】:TypeError: 'JavaPackage' object is not callable (spark._jvm)TypeError:“JavaPackage”对象不可调用(spark._jvm)
【发布时间】:2020-02-24 17:46:00
【问题描述】:

我正在设置 GeoSpark Python 并在安装所有先决条件后,我正在运行非常基本的代码示例来测试它。

from pyspark.sql import SparkSession
from geo_pyspark.register import GeoSparkRegistrator


spark = SparkSession.builder.\
        getOrCreate()

GeoSparkRegistrator.registerAll(spark)

df = spark.sql("""SELECT st_GeomFromWKT('POINT(6.0 52.0)') as geom""")

df.show()

我尝试用python3 basic.pyspark-submit basic.py 运行它,都给我这个错误:

Traceback (most recent call last):
  File "/home/jessica/Downloads/geo_pyspark/basic.py", line 8, in <module>
    GeoSparkRegistrator.registerAll(spark)
  File "/home/jessica/Downloads/geo_pyspark/geo_pyspark/register/geo_registrator.py", line 22, in registerAll
    cls.register(spark)
  File "/home/jessica/Downloads/geo_pyspark/geo_pyspark/register/geo_registrator.py", line 27, in register
    spark._jvm. \
TypeError: 'JavaPackage' object is not callable

我正在使用 Java 8、Python 3、Apache Spark 2.4,我的 JAVA_HOME 设置正确,我正在运行 Linux Mint 19。我的 SPARK_HOME 也已设置:

$ printenv SPARK_HOME
/home/jessica/spark/

我该如何解决这个问题?

【问题讨论】:

    标签: java python apache-spark java-package geospark


    【解决方案1】:

    geoSpark 的 Jars 未在您的 Spark 会话中正确注册。有几种方法可以解决这个问题,从有点不方便到非常无缝。例如,如果您在调用 spark-submit 时指定:

    --jars jar1.jar,jar2.jar,jar3.jar

    那么问题就会消失,如果那是你的毒药,你也可以向pyspark 提供类似的命令。

    如果像我一样,你真的不想在每次启动时都这样做(并且在 Jupyter 中将其设置为 .conf() 会让人厌烦),那么你可以进入 $SPARK_HOME/conf/spark-defaults.conf 并设置:

    spark-jars jar1.jar,jar2.jar,jar3.jar

    然后在您创建 spark 实例时加载。如果您之前没有使用过 conf 文件,它将以spark-defaults.conf.template 的形式出现。

    当然,当我说 jar1.jar....时,我真正的意思是:

    /jars/geo_wrapper_2.11-0.3.0.jar,/jars/geospark-1.2.0.jar,/jars/geospark-sql_2.3-1.2.0.jar,/jars/geospark-viz_2.3-1.2.0.jar

    但这取决于您从 geo_pyspark 包中获取正确的内容。

    如果您使用的是 EMR: 您需要将集群配置 json 设置为

    [
      {
        "classification":"spark-defaults", 
        "properties":{
          "spark.jars": "/jars/geo_wrapper_2.11-0.3.0.jar,/jars/geospark-1.2.0.jar,/jars/geospark-sql_2.3-1.2.0.jar,/jars/geospark-viz_2.3-1.2.0.jar"
          }, 
        "configurations":[]
      }
    ]
    

    并让您的 jars 作为引导程序的一部分上传。您可以从 Maven 执行此操作,但我只是将它们扔到 S3 存储桶上:

    #!/bin/bash
    sudo mkdir /jars
    sudo aws s3 cp s3://geospark-test-ds/bootstrap/geo_wrapper_2.11-0.3.0.jar /jars/
    sudo aws s3 cp s3://geospark-test-ds/bootstrap/geospark-1.2.0.jar /jars/
    sudo aws s3 cp s3://geospark-test-ds/bootstrap/geospark-sql_2.3-1.2.0.jar /jars/
    sudo aws s3 cp s3://geospark-test-ds/bootstrap/geospark-viz_2.3-1.2.0.jar /jars/
    

    如果您使用的是 EMR 笔记本 您需要在笔记本顶部放置一个魔法单元:

    %%configure -f
    {
    "jars": [
            "s3://geospark-test-ds/bootstrap/geo_wrapper_2.11-0.3.0.jar",
            "s3://geospark-test-ds/bootstrap/geospark-1.2.0.jar",
            "s3://geospark-test-ds/bootstrap/geospark-sql_2.3-1.2.0.jar",
            "s3://geospark-test-ds/bootstrap/geospark-viz_2.3-1.2.0.jar"
        ]
    }
    

    【讨论】:

    • 非常感谢!这里还有一个补充,如果有人将geospark 作为一个包安装在集群上,那么他们也可以在指定spark.jars 时使用位置/usr/local/lib/python3.6/site-packages/geospark/jars/2_4/&lt;JAR_FILE&gt;,因为这是在EMR 上用于主节点和核心节点的位置。
    • 在哪里可以下载 geo_wrapper.jar?
    • 已经有一段时间了,但我认为我们是从 geo_pyspark 存储库中获取的,请确保获得正确的版本:github.com/Imbruced/geo_pyspark/tree/master/geo_pyspark/jars
    • 如果您在 Databricks 笔记本中看到同样的问题,您可以通过 UI 安装缺少的 JAR 以进行集群配置。
    • 顺便说一下,错误表明已安装 Python 代码(因此 Python 导入工作)但不是该 Python 代码使用的 JAR。
    【解决方案2】:

    我在 Windows 10 机器上看到了 SparkMeasure jar 的类似问题

    self.stagemetrics =
    self.sc._jvm.ch.cern.sparkmeasure.StageMetrics(self.sparksession._jsparkSession)
    TypeError: 'JavaPackage' object is not callable
    

    所以我做的是

    1. 通过 Pyspark shell 进入“SPARK_HOME”,并安装所需的 jar

      bin/pyspark --packages ch.cern.sparkmeasure:spark-measure_2.12:0.16

    2. 抓取那个 jar (ch.cern.sparkmeasure_spark-measure_2.12-0.16.jar) 并复制到“SPARK_HOME”的 Jars 文件夹中

    3. 重新运行脚本,现在它没有出现上述错误。

    【讨论】:

      猜你喜欢
      • 2022-08-11
      • 2017-01-04
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      相关资源
      最近更新 更多