2016-03-17 2 views
3

Я очень новичок в hadoop, поэтому, пожалуйста, несите меня. Любая помощь будет оценена по достоинству.Присоединяйтесь к 2 столам в хаусе

Мне нужно присоединиться к 2 столам, Таблица 1 будет иметь pagename, pagerank , например. Фактический набор данных огромен, но с подобным рисунком

pageA,0.13 
pageB,0.14 
pageC,0.53 

таблицей 2, это простой WordCount вид таблицы со словом, имя_листом для например. фактический набор данных огромен, но с подобным рисунком

test,pageA:pageB 
sample,pageC 
json,pageC:pageA:pageD 

Теперь, если пользователь ищет любое слово из второй таблицы, я должен дать ему результаты страниц, основываясь на их PageRank из таблицы 1.

Производительность при искали test,

test = pageB,pageA 

Мой подход заключался в том, чтобы загрузить первую таблицу в распределенный кеш. Прочитайте вторую таблицу в методе карты, чтобы получить список страниц для слова, отсортируйте список, используя информацию pagerank из первой таблицы, которая загружается в распределенный кеш. Это работает для набора данных, в котором я работаю, но хотел узнать, есть ли лучший способ, а также хотел бы знать, как это соединение может быть сделано с помощью свиньи или улья.

+5

лично я бы использовать Свинью, но вы даже смотрели на Pig или синтаксис объединения в Hive? Примеры в документации просты –

+0

Где находятся две таблицы? В Улье? В файле? –

+0

Он хранится в hdfs как файл. – user507333

ответ

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 
+0

ничего себе. Это так просто. спасибо – user507333