在 hadoop 中加入 2 个表
Join 2 tables in hadoop
我是 hadoop 的新手,所以请多多包涵。任何帮助,将不胜感激。
我需要加入 2 tables,
Table 1 将有 pagename , pagerank
例如。实际数据集很大但具有相似的模式
pageA,0.13
pageB,0.14
pageC,0.53
Table 2,它是一种简单的 wordcount 类型 table with word , pagename
例如。实际数据集很大但具有相似的模式
test,pageA:pageB
sample,pageC
json,pageC:pageA:pageD
现在,如果用户搜索第二个 table 中的任何词,我应该根据 table 1.
的页面排名向他提供页面结果
搜索测试时输出,
test = pageB,pageA
我的方法是将第一个 table 加载到分布式缓存中。在 map 方法中读取第二个 table 获取单词的页面列表,使用加载到分布式缓存中的第一个 table 中的 pagerank 信息对列表进行排序。这适用于我正在工作的数据集,但想知道是否有更好的方法,还想知道如何使用 pig 或 hive 完成此连接。
使用 pig 脚本的简单方法:
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 [=10=]) GENERATE page, rank;
SORTED_RESULTS = ORDER RESULTS BY rank DESC;
DUMP SORTED_RESULTS;
脚本需要一个参数,即查询词:
pig -f pagerank_join.pig -param query_word=test
我是 hadoop 的新手,所以请多多包涵。任何帮助,将不胜感激。
我需要加入 2 tables, Table 1 将有 pagename , pagerank 例如。实际数据集很大但具有相似的模式
pageA,0.13
pageB,0.14
pageC,0.53
Table 2,它是一种简单的 wordcount 类型 table with word , pagename 例如。实际数据集很大但具有相似的模式
test,pageA:pageB
sample,pageC
json,pageC:pageA:pageD
现在,如果用户搜索第二个 table 中的任何词,我应该根据 table 1.
的页面排名向他提供页面结果搜索测试时输出,
test = pageB,pageA
我的方法是将第一个 table 加载到分布式缓存中。在 map 方法中读取第二个 table 获取单词的页面列表,使用加载到分布式缓存中的第一个 table 中的 pagerank 信息对列表进行排序。这适用于我正在工作的数据集,但想知道是否有更好的方法,还想知道如何使用 pig 或 hive 完成此连接。
使用 pig 脚本的简单方法:
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 [=10=]) GENERATE page, rank;
SORTED_RESULTS = ORDER RESULTS BY rank DESC;
DUMP SORTED_RESULTS;
脚本需要一个参数,即查询词:
pig -f pagerank_join.pig -param query_word=test