GeoTrellis и GeoPySpark - TypeError: объект "JavaPackage" не вызывается

Я новичок в GeoTrellis, и у меня был вопрос о примере скрипта в readme геопространства: 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' не вызывается.

Похоже, это указывает на эту строку в геопространстве /geotrellis/geotiff_rdd.py:geotiff_rdd = geopysc._jvm.geopyspark.geotrellis.io.geotiff.GeoTiffRDD

Есть ли способ, которым я могу запустить этот код, используя spark-submit? Судя по тому, что я прочитал, кажется, что я не могу запустить свой код в кластере, используя python example.py, Это тот случай? И если так, как я могу обойти эту проблему, чтобы запустить код GeoPySpark в кластере?

Должен ли я просто изучить scala и использовать это вместо этого?

1 ответ

@ Чарли-Hofmann. Я один из разработчиков 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, поэтому не могу оказать большую помощь, кроме этого. Однако у нас есть репозиторий, содержащий примеры использования GeoPySpark в EMR. Кроме того, у нас есть канал Gitter, где разработчики, которые более осведомлены об этой теме, могут ответить на ваши вопросы.

Я извиняюсь за то, что не смог ответить на все ваши вопросы, но я по крайней мере хотел оказать некоторую помощь.

Лучший,

Джейк

Другие вопросы по тегам