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

dojqjjoe  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(417)

我有两张table,其中一张大约有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)?

bnl4lu3b

bnl4lu3b1#

Hive 表的性能取决于不同的点。
查询工程师
文件格式
使用矢量化 set hive.vectorized.execution.enabled = true;set hive.vectorized.execution.reduce.enabled = true; 如果你有好的服务器,你可以试试 Impala 而且肯定比 Hive .
您可以对 impala 这将使您能够更快地执行此查询

相关问题