【问题标题】:GeoTrellis and GeoPySpark - TypeError: 'JavaPackage' object is not callableGeoTrellis 和 GeoPySpark - TypeError: 'JavaPackage' 对象不可调用
【发布时间】:2025-12-09 02:20:12
【问题描述】:

我是 GeoTrellis 的新手,对 geopyspark 自述文件中的示例脚本有疑问:https://github.com/locationtech-labs/geopyspark

这是脚本的缩写版本(我们称之为 example.py):

import json
from functools import partial

from geopyspark.geopycontext import GeoPyContext
from geopyspark.geotrellis.constants import SPATIAL, ZOOM
from geopyspark.geotrellis.geotiff_rdd import get
from geopyspark.geotrellis.catalog import write

from shapely.geometry import Polygon, shape
from shapely.ops import transform
import pyproj


# Create the GeoPyContext
geopysc = GeoPyContext(appName="example", master="local[*]")

# Read in the NLCD tif that has been saved locally.
# This tif represents the state of Pennsylvania.
raster_rdd = get(geopysc=geopysc, rdd_type=SPATIAL,
uri='/tmp/NLCD2011_LC_Pennsylvania.tif',
options={'numPartitions': 100})

我可以使用 python3 example.py 在 EMR 集群上运行它,但是当我尝试运行 spark-submit example.py 时,我得到 TypeError: 'JavaPackage' object is not callable。

这似乎指向 geopyspark/geotrellis/geotiff_rdd.py 中的这一行: geotiff_rdd = geopysc._jvm.geopyspark.geotrellis.io.geotiff.GeoTiffRDD

有什么方法可以使用spark-submit 运行此代码?根据我所阅读的内容,我似乎无法使用python example.py 在集群上运行我的代码。是这样吗?如果是这样,我该如何解决这个问题以在集群上运行 GeoPySpark 代码?

我应该只学习 scala 并改用它吗?

【问题讨论】:

    标签: pyspark geotrellis


    【解决方案1】:

    @charlie-hofmann。我是 GeoPySpark 的开发人员之一,可以为您提供一些帮助。

    我想指出的第一件事是,我们昨天刚刚发布了 GeoPySpark v0.2.0,随着该版本的发布,API 发生了一些重大变化,这些变化并未反映在您的示例代码中。我们已经更新了适用于 0.2.0 版本的示例。

    您之前遇到的错误确实是由于没有安装后端jar(由于PyPi的大小限制需要单独下载),但是您后来发现在尝试运行代码时不起作用在电子病历上。如果您熟悉 Docker,我们有一个容器,其中包含运行 GeoPySpark 所需的环境,包括 EMR。

    可以通过这个命令下载:

    docker pull quay.io/geodocker/jupyter-geopyspark

    我们在容器中部署 EMR 的一种方法是将二进制依赖项放入传递给 spark-submit 的存档中。不幸的是,我对 EMR 不是很熟悉,所以除此之外我无法提供太多帮助。不过,我们确实有一个 repository,其中包含在 EMR 上使用 GeoPySpark 的示例。此外,我们还有一个Gitter channel,对此主题更了解的开发人员可以回答您的问题。

    很抱歉无法回答您的所有问题,但我至少想提供一些帮助。

    最好的,

    杰克

    【讨论】:

    • 链接到 docker 容器仓库:github.com/geodocker/geodocker-jupyter-geopyspark
    • 非常感谢您对 @jbouffard 的帮助——我现在将启动一个 EMR 集群并进行测试!
    • 在理解 jupyterhub、docker 和 emr 如何交互时遇到一些问题——如果我有进一步的问题,可以在 gitter 中解决这个问题。再次感谢@jbouffard 的帮助!
    • 不客气,@charlie-hofmann! Jupyterhub 提供了一种以更具交互性的方式可视化和分析数据的方法,但这不是必需的。虽然 docker 容器包含已经设置为在 Jupyter Notebook 和 EMR 上使用 GeoPySpark 的环境。如果您有任何问题,请随时向我们提问!最好的,杰克
    最近更新 更多