【发布时间】:2021-12-28 18:31:30
【问题描述】:
我有一个要求,我需要加入一个包含人名的推文表,例如过滤包含任何人名的推文。我有以下数据:
推文表:(7000 万条记录存储为 HIVE 表)
| id | tweet |
|---|---|
| 1 | Cristiano Ronaldo greatest of all time |
| 2 | Brad Pitt movies |
| 3 | Random tweet without any person name |
人物姓名:(160 万个姓名以 .tsv 文件形式存储在 HDFS 上)
| id | person_name |
|---|---|
| 1 | Cristiano Ronaldo |
| 2 | Brad Pitt |
| 3 | Angelina Jolie |
预期结果:
| id | tweet | person_name |
|---|---|---|
| 1 | Cristiano Ronaldo greatest of all time | Cristiano Ronaldo |
| 2 | Brad Pitt movies | Brad Pitt |
到目前为止我已经尝试过:
我也将人名 .tsv 文件转换为 HIVE 表,然后尝试使用以下 HIVE 查询连接 2 个表:
SELECT * FROM tweets t INNER JOIN people p WHERE instr(t.tweet, p.person_name) > 0;
尝试了一些示例数据,它工作正常。但是当我尝试运行整个数据时(7000 万条推文与 160 万个人姓名一起加入),它需要很长时间。绝对看起来效率不高。
我也想尝试使用 PIG 进行 JOIN(因为它被认为比 HIVE JOIN 更有效),我可以直接加入人名 .tsv 文件 tweets HIVE 表,但不确定如何基于 PIG 中的子字符串加入.
如果你有任何想法,有人可以分享这个问题的 PIG JOIN 语法吗?另外,请给我建议我可以使用的任何替代方案吗?
【问题讨论】:
-
I wanted to try JOIN with PIG as well (as it is considered little more efficient than HIVE JOIN),这几天几乎肯定不是真的; Pig 已经 4 年没有发布了,而 Hive 仍在积极开发中。 -
谢谢。没错,但我很想尝试 PIG 脚本。你知道这种 JOIN 的语法在 PIG 中是什么样的吗?
标签: hadoop join hive bigdata apache-pig