我对hadoop很新,所以请耐心等待。任何帮助,将不胜感激。
我需要加入2张桌子, 表1将具有pagename,pagerank 例如。实际数据集很大但具有相似的模式
pageA,0.13
pageB,0.14
pageC,0.53
表2,它是一个简单的wordcount类表,带有word,pagename 例如。实际数据集很大但具有相似的模式
test,pageA:pageB
sample,pageC
json,pageC:pageA:pageD
现在,如果用户搜索第二个表中的任何单词,我应该根据表1中的pagerank向他提供页面结果。
搜索测试时的输出,
test = pageB,pageA
我的方法是将第一个表加载到分布式缓存中。在map方法中读取第二个表获取该单词的页面列表,使用第一个表中的pagerank信息对列表进行排序,该表加载到分布式缓存中。这适用于我正在工作的数据集,但想知道是否有更好的方法,也想知道如何使用pig或hive进行连接。
答案 0 :(得分:1)
使用猪脚本的简单方法:
PAGERANK = LOAD 'hdfs/pagerank/dataset/location' USING PigStorage(',')
AS (page:chararray, rank:float);
WORDS_TO_PAGES = LOAD 'hdfs/words/dataset/location' USING PigStorage(',')
AS (word:chararray, pages:chararray);
PAGES_MATCHING = FOREACH (FILTER WORDS_TO_PAGES BY word == '$query_word') GENERATE FLATTEN(TOKENIZE(pages, ':'));
RESULTS = FOREACH (JOIN PAGERANK BY page, PAGES_MATCHING BY $0) GENERATE page, rank;
SORTED_RESULTS = ORDER RESULTS BY rank DESC;
DUMP SORTED_RESULTS;
脚本需要一个参数,即查询词:
pig -f pagerank_join.pig -param query_word=test