2017-08-10 37 views
1

我是GeoTrellis的新手,並對geopyspark自述文件中的示例腳本有疑問:https://github.com/locationtech-labs/geopysparkGeoTrellis和GeoPySpark - TypeError:'JavaPackage'對象不可調用

下面是腳本的簡化版本(我們將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

有什麼辦法,我可以運行使用​​這個代碼?根據我讀過的內容,似乎我無法使用python example.py在集羣上運行我的代碼。是這樣嗎?如果是這樣,我該如何解決這個問題以在集羣上運行GeoPySpark代碼?

我應該學習scala並使用它嗎?

回答

2

@ charlie-hofmann。我是GeoPySpark的開發人員之一,可以給你一些幫助。

我想指出的第一件事是,我們昨天剛剛發佈了GeoPySpark v0.2.0,並且在該版本中發生了一些對您的示例代碼沒有反映的API的重大更改。我們已經更新了,這個例子可以在0.2.0版本中使用。

您之前面臨的錯誤確實是由於沒有安裝後端jar(由於PyPi的大小限制,它需要單獨下載),但是後來發現在嘗試運行時無法正常工作EMR上的代碼。如果您熟悉Docker,那麼我們有一個容器,它具有運行GeoPySpark所需的環境,包括EMR。

它可以通過這個命令下載:我們在容器部署EMR

docker pull quay.io/geodocker/jupyter-geopyspark

的方法之一就是把二進制依賴到傳遞給​​存檔。不幸的是,我對EMR不是很熟悉,所以除了這個之外我無法提供太多的幫助。不過,我們確實有一個repository,其中包含在EMR上使用GeoPySpark的示例。另外,我們有一個Gitter channel,對這個主題更爲了解的開發人員可以回答你的問題。

我很抱歉無法回答您的所有問題,但我至少想提供一些幫助。

最佳,

傑克

+0

鏈接更新例如:https://github.com/locationtech-labs/geopyspark#a-quick-example – jbouffard

+0

鏈接到泊塢窗集裝箱倉庫:https://開頭github.com/geodocker/geodocker-jupyter-geopyspark – jbouffard

+0

非常感謝您對這個@ jbouffard的幫助 - 我現在將開始一個EMR集羣並測試! –