Слева в полусоединение на геопространственных таблицах в 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.
1 ответ
Был в состоянии достичь этого с помощью:
select * from d1 left semi join d2 on st_contains(st_bufferPoint(d1.point, 10000.0), d2.point)
Spark транслировал d2 & выполняет соединения, но это все еще занимает больше времени, так как размер d1 составляет 5 миллиардов, а d2 составляет 10 миллионов.
Не уверен, что если есть более эффективный способ добиться того же.