问题:
我有2个包含地理空间点的表(d1和d2)。我想执行以下查询:
select * from table 1 where table1.point is within 50km of any point in table2.point
我正在Spark-SQL
使用GeoMesa
& Accumulo
实现同样的目标。 (Spark为处理引擎,Accumulo为Data Store,GeoMesa为GeoSpatial库)。
以上查询有点 left semi join
,但我不确定如何使用Spark-SQL
来实现它,因为据我所知,子查询无法实现用于where子句。
答案 0 :(得分: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万。
不确定是否有更有效的方法来实现同样的目标。