levenshtein在Hive或Impala中加入的有效方式

时间:2017-03-15 06:56:07

标签: hadoop join hive impala levenshtein-distance

我有两个表,一个包含大约17K(NLIST)个记录,而另一个包含57K(FNAMES)。

我想通过使用levenshtein公式比较记录来加入两者。

以下是表格内容的示例:

NLIST

+------+-------------+
| ID   |   S_NAME    |
+------+-------------+
|  1   |   Avi       |
|  2   |   Moshe     |
|  3   |   David     |
....

FNAMES

+------+-------------+
| ID   |   NICKNAMES |
+------+-------------+
|  1   |  Avile      |
|  2   |  Dudi       |
|  3   |  Moshiko    |
|  4   |  Avi        |
|  5   |  DAVE       |
....

以上表格仅为示例。在实际情况中,名称列可以包含多个单词。

所需的结果应为:

+------+-------------+--------+
| ID   |   NICKNAMES | S_NAME |
+------+-------------+--------+
|  1   |  Avile      | Avi    |
|  2   |  Dudi       | David  |
|  3   |  Moshiko    | Moshe  |
|  4   |  Avi        | Avi    |
|  5   |  DAVE       | David  |
...

以下是我使用的代码:

select FNAMES.NICKNAMES, NLIST.S_NAME  
from NICKNAMES
LEFT OUTER JOIN NLIST
ON(true)  
WHERE levenshtein (FNAMES.NICKNAMES, NLIST.S_NAME) <=4

上面的代码运行了很长时间,我停止了它的运行。

如何让它在合理的时间内运行?

此外,我认为levenshtein距离取决于单词的长度。如何找到距离的最佳值(在这种情况下,我任意选择4个)?

1 个答案:

答案 0 :(得分:-2)

Hive表的表现取决于各点。

  • 查询工具
  • 文件格式
  • 使用VECTORIZATION set hive.vectorized.execution.enabled = true;set hive.vectorized.execution.reduce.enabled = true;

如果您有良好的服务器,可以尝试Impala,但肯定比Hive更快。

您可以对impala进行微调,这样可以更快地执行此查询。Tuning Impala for Performance