0

问题:

我有 2 个包含地理空间点的表(d1 和 d2)。我想执行以下查询:

select * from table 1 where table1.point is within 50km of any point in table2.point

我使用Spark-SQLwith GeoMesa&Accumulo来达到同样的效果。(Spark 作为处理引擎,Accumulo 作为数据存储和 GeoMesa 用于 GeoSpatial 库)。

上面的查询有点,left semi join但我不确定如何使用它来实现它,Spark-SQL因为据我所知,子查询不能在 where 子句中使用。

4

1 回答 1

0

能够使用以下方法实现此目的:

select * from d1 left semi join d2 on st_contains(st_bufferPoint(d1.point, 10000.0), d2.point)

Spark 广播了 d2 并正在执行连接,但仍然需要更多时间,因为 d1 的大小为 50 亿,d2 为 1000 万。

不确定是否有更有效的方法来实现同样的目标。

于 2017-03-23T11:22:31.887 回答