sql—客户位置和配置单元中poi之间的距离

mefy6pfw  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(475)

我试图计算每个客户和hive中的兴趣点之间的距离。但只对客户30英里内的兴趣点感兴趣。挑战是我有接近60毫米的客户和2毫米的兴趣点。连接是昂贵的一个-是他们的方式来限制计算限制在一定半径内的兴趣点。
我在hive中使用esri包来执行距离计算

yzuktlbb

yzuktlbb1#

如果没有某种空间索引,就没有一种有效的方法来减少连接的计算量。我不知道esri配置单元函数有任何可用的空间索引(来源:我是该项目的贡献者)。

31moq8wy

31moq8wy2#

根据评论更新:

看来您需要一种逐步的方法来利用这些优化。我的想法如下:
与任何工具一样,您可以使用“标准”技巧来解决此类问题。
这个想法是,你可以有效地知道是否需要比较东西,因为排序相对便宜。因此,您可以实现如下内容:
首先根据位置定义类别(例如,基于1个小数点的舍入长度和纬度)。
计算之后,您的数据将如下所示,其中实体可以是客户或poi:

Entity: A
lon: 42.0123
lat: 13.3123
lonset: 420
latset: 133

现在可以在join中构建两个强where子句。第一个可用于创建短纵向距离对列表,第二个可用于创建短纬度距离对列表。

Poi.Lonset=Customer.Lonset OR Poi.Lonset=Customer.Lonset+1  OR Poi.Lonset=Customer.Lonset - 1

Poi.Latset=Customer.Latset OR Poi.Latset=Customer.Latset+1  OR Poi.Latset=Customer.Latset - 1

您的数据现在应该如下所示:

Cust: A
Poi: X
londist: 24

Cust A:
Poi: X
latdist: 13

当然,这假设lonset和latset至少有30英里宽,否则您可以相应地进行调整。
现在您只需要将这两个表连接起来并计算它们之间的距离(由于这些点位于30英里以内,因此基本上可以使用毕达哥拉斯来精确计算)。
我不熟悉esra软件包,也没有尝试过直接在hive中实现这一点,但是您可以始终使用pig,在那里我可以证明它可以以一种智能的方式实现这种连接。

相关问题