在 Spark-SQL 和 GeoMesa 中的地理空间表上进行左半连接

Left Semi Join on Geo-Spatial tables in Spark-SQL & GeoMesa

问题:

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

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

我正在使用 Spark-SQLGeoMesa & Accumulo 来实现相同的目的。 (Spark 作为处理引擎,Accumulo 作为数据存储,GeoMesa 用于 GeoSpatial 库)。

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

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

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

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

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