Слева в полусоединение на геопространственных таблицах в 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 миллионов.

Не уверен, что если есть более эффективный способ добиться того же.

Другие вопросы по тегам