我在Hive中有一个如下所示的数据集:
Point Latitude Longitude
A 40.3 74.8
B 12.5 -45.1
C -32.7 87.6
D 23.9 -67.2
... ... ...
如何从所有其他点获得每个点的距离矩阵?即,距离AB,AC,AD,BC,BD,CD等。如果以线性格式更容易输出,那也没关系。我希望能够使用Hive查询语言完成所有这些。
编辑:数据包含数十万行。最后,我希望能够识别给定点的某个半径内的所有点。因此,如果有办法通过先滤除点或使用某种近似来减少计算次数,我也愿意这样做。
答案 0 :(得分:1)
一种可能的解决方案是,您可以在没有任何条件的情况下自行连接。输出将是这样的
query1 query1 query1 query2 query2 query2
Point Latitude Longitude Point Latitude Longitude
A 40.3 74.8 A 40.3 74.8
A 40.3 74.8 B 12.5 -45.1
A 40.3 74.8 C -32.7 87.6
A 40.3 74.8 D 23.9 -67.2
...
使用上面的输出作为子查询并计算点之间的距离。基本上query1.Point和query2.point的concat会给你一对,纬度和经度上的距离函数会给你它们之间的距离。
希望这有帮助。