hadoop - 在 PIG 中发送到 UDF 之前获取交叉数据的更好方法

标签 hadoop apache-pig fuzzy-comparison

我想使用我创建的模糊 UDF,将每个人列表与所有内容数据发送到 UDF 进行比较。为此,我决定在发送之前使用CROSS 数据。

这是我的示例人员列表,

101|PORAWAT
102|HADI
103|RIO

我的内容,每个数据可能包含不止一个人,数据可能相似(由于错字):

1001|case1|PORACWAT VS RIO CORP
1002|case2|PANIT

要将数据发送到 UDF,我决定在调用 UDF 之前使用 CROSS 数据,这是我的代码:

REGISTER hdfs:/user/hue/myudfs.jar;

-- LOAD
person_list = LOAD '/user/hue/data/person' USING PigStorage('|') as (p_id:chararray,p_name:chararray);
content_list =  LOAD '/user/hue/data/content' USING PigStorage('|') as (c_id:chararray,c_caseid:chararray,c_content:chararray);

-- CROSS
person_cross_content = CROSS person_list, content_list;

DESCRIBE person_cross_content;
person_cross_content : {person_list::p_id: chararray,person_list::p_name: chararray,content_list::c_id: chararray,content_list::c_caseid: chararray,content_list::c_content: chararray}

因此,交叉内容将是:

101,PORAWAT,1001,case1,PORACWAT X RIO CORP
101,PORAWAT,1002,case2,PANIT
102,HADI,1001,case1,PORACWAT X RIO CORP
102,HADI,1002,case2,PANIT
103,RIO,1001,case1,PORACWAT X RIO CORP
103,RIO,1002,case2,PANIT

然后,用我的模糊 UDF 检查所有人的所有内容,只得到完全/相似的匹配结果,我会这样调用:

-- MyFuzzyMatching will return true when p_name occurred(exact/similar) in c_content
A = FOREACH person_cross_content GENERATE p_name, c_caseid, myudfs.MyFuzzyMatching(p_name,c_content) as (fuzzy_result:chararray);

-- Filter just only match result
FILTER A BY fuzzy_result == 'true';

-- Store the result ...

因此,输出如下:

PORAWAT,case1,true
RIO,case1,true

当我执行这个脚本命令时,当我使用真实数据时,它需要很长时间才能得到结果。关于 Pig 引用,不建议使用 CROSS,因为操作昂贵,但我不知道如何实现这些。

有没有更好的方法将所有内容的所有人发送到 UDF?

最佳答案

如果您的数据量很大,CROSS 可能会导致性能问题 (think you know this already)。一种选择是转换出您的 UDF 所需的字段 (p_name,c_content),以分离关系并交叉它们。使用较少的数据,CROSS 可能会稍微快一些。您可以在运行您的 UDF 后加入他们。

关于hadoop - 在 PIG 中发送到 UDF 之前获取交叉数据的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35147729/

相关文章:

R:使用plyr在两个数据源的匹配子集之间进行模糊字符串匹配

python - Ruby 上的 difflib

hadoop - 如何关闭你的namenode?

hadoop - Hadoop jar提交错误java.lang.InstantiationException

java - Hadoop:无法使用 Jps 命令

hadoop - 基于分组的 pig 脚本

input - 节点本地映射减少作业

hadoop - PigLatin问题

hadoop - Apache pig : Select from multiple table on a common column without join

python - Python 缩写检测