我是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并使用它吗?
答案 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,对此主题更了解的开发人员可以回答您的问题。
我很抱歉无法回答你的所有问题,但我至少想提供一些帮助。
最佳,
杰克