2

我是 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})

我可以使用 在 EMR 集群上运行它python3 example.py,但是当我尝试运行时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并改用它吗?

4

1 回答 1

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 不是很熟悉,所以除此之外我无法提供太多帮助。不过,我们确实有一个存储库,其中包含在 EMR 上使用 GeoPySpark 的示例。此外,我们还有一个Gitter 频道,对这个话题有更多了解的开发者可以在这里回答您的问题。

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

最好的,

杰克

于 2017-08-15T22:33:53.157 回答