GeoTrellis和GeoPySpark - TypeError:'JavaPackage'对象不可调用

时间:2017-08-10 14:58:58

标签: pyspark geotrellis

我是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'对象不可调用。

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

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

我应该学习scala并使用它吗?

1 个答案:

答案 0 :(得分:3)

@查理霍夫曼。我是GeoPySpark的开发者之一,可以给你一些帮助。

我首先想指出的是,我们昨天刚刚发布了GeoPySpark v0.2.0,并且在该版本中发布了一些API的重大更改,这些更改未在示例代码中反映出来。我们已经更新了,这个例子适用于0.2.0版本。

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

可以通过以下命令下载:

docker pull quay.io/geodocker/jupyter-geopyspark

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

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

最佳,

杰克