【问题标题】:How to Load Spatial Data using the Hadoop GIS framework如何使用 Hadoop GIS 框架加载空间数据
【发布时间】:2014-11-26 10:54:53
【问题描述】:

我正在尝试使用Hadoop GIS Framework,以便为 hive 添加空间支持。 我想做的一件事是从外部数据(来自 PostGIS)创建一个空间表。 不幸的是,ESRI 提供的serializer 映射为 ESRI JSON 格式,而不是 WKT、GeoJSON 等标准。我最终做的是一个解决方法。

第一件事是将我的 PostGIS 数据导出为制表符分隔文件,将几何字段转换为 GeoJSON。

\COPY (select id, ST_AsGeoJSON(geom) from grid_10) TO '/tmp/grid_10.geojson';

然后我把它放在 S3 文件系统的某个地方,并使用 csv 序列化程序加载它。它创建了一个包含两个字段的表:整数和文本(包含 GeoJSON)。

CREATE EXTERNAL TABLE grid_10 (id bigint, json STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 's3://some-url/data/grids/geojson';

我可以使用这个查询从这个 GeoJSON 正确地生成几何图形:

SELECT ID, ST_AsText(ST_GeomFromGeoJSON(json)) from grid_10 limit 3;

哪些输出:

现在我想将此表转换为实际空间表,其中几何图形存储为 BLOB,而不是一些文本。我通过以下查询做到了:

create table new_grid as SELECT ID, ST_GeomFromGeoJSON(json) as geom from grid_10;  

令我惊讶的是,这张表的内容是相同的几何图形,一遍又一遍地重复。

我尝试了相同的方法 - 从 WKT/GeoJSON 创建几何并将其写入表格 - 结果相同。这是一个错误吗?这是否意味着,我注定要使用即时转换来执行空间查询,顺便说一句,这在计算方面不是比操作 BLOB 成本高吗?

create table grid_cnt as 
SELECT grid_10.id, count(grid_10.id) as ptcnt FROM grid_10 JOIN tweets WHERE     ST_Contains(ST_GeomFromGeoJSON(grid_10.json),ST_Point(tweets.longitude, tweets.latitude))=true GROUP BY grid_10.id;

我想知道是否有人遇到过同样的问题。

更新: 这个问题发生在 Hive 0.11 上,在 Amazon Hadoop 的 Distribution 3.3.1 上运行。我还从这个链接中提取了 ESRI 罐子:

https://github.com/Esri/gis-tools-for-hadoop/archive/master.zip

当我切换到jar 2.0,和最新的hive(0.13)时,问题就消失了。

你可以找到我的问题报告here。希望这可以帮助遇到同样问题的人。

【问题讨论】:

    标签: hadoop geometry hive gis spatial-query


    【解决方案1】:

    我遇到了您上面描述的相同问题...我得到的一些专家的解决方案是将您的几何信息存储在 wkt 中,即文本格式而不是您尝试过的几何格式。

    【讨论】:

    • 是的,这就是我正在做的事情,但我认为动态进行几何实例化会导致计算效率低下......这是一个错误吗??
    • 我不知道这是不是一个bug,但是...wkt也可以直接使用空间分析功能进行分析,同时我们不需要几何实例化。
    • 我明白了。在那种情况下,根本不提供二进制表示不是更好吗?我认为最好不提供一些东西,特别是如果它不是必需的,而不是提供一些误导/错误的东西......
    • 同样的情况我挣扎了 1 周...我为 postgis 中的几何创建二进制类型,将其加载到具有二进制数据类型的 hcataloge 中......但是 esri 函数不起作用......来了到同一个零位..!!
    • 你使用的是什么版本的 Hive?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多