在 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-SQL
和 GeoMesa
& 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 万。
不确定是否有更有效的方法来实现同样的目标。
问题:
我有 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 作为数据存储,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 万。
不确定是否有更有效的方法来实现同样的目标。