计算Hive中的成对距离

时间:2014-12-18 19:49:31

标签: hive hiveql

我在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查询语言完成所有这些。

编辑:数据包含数十万行。最后,我希望能够识别给定点的某个半径内的所有点。因此,如果有办法通过先滤除点或使用某种近似来减少计算次数,我也愿意这样做。

1 个答案:

答案 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会给你一对,纬度和经度上的距离函数会给你它们之间的距离。

希望这有帮助。

相关问题