2016-03-21 3 views
0

Нужно вычислить CTR (количество кликов по количеству показов, на уровне страны), я перечисляю структуру таблицы (таблицу показа и таблицу кликов) и мой код в Hadoop Pig. Мой вопрос заключается в том, является ли ниже внедрение наиболее эффективным, более эффективным решением? Благодарю.расчет стоимости кликов в Hadoop Pig

стол впечатление:

impressionID, метка времени, CountryId

нажмите стол:

impressionID, метка времени

joined_feed = join impression by impressionID, click by impression ID; 
joined_feed = foreach joined_feed generate impression::countryID, click::impressionID is null? 0 : 1 as clicked; 
ctr_result = foreach (group joined_feed by country) generate group as countryID, SUM(clicked)/COUNT(joined_feed) 
+1

Для такого кода вы должны получить CTR равным 1. Насколько я понимаю, вы должны были присоединиться сюда. Кроме того, было бы здорово иметь страну в таблице кликов. Затем вы можете группировать клики и показы отдельно и присоединяться по countryID, что намного быстрее. – zuku

+1

На каждой стадии отображения/уменьшения соединения последняя таблица в последовательности передается через редукторы, где остальные буферизуются. Таким образом, это помогает уменьшить объем памяти, необходимый в редукторе, для буферизации строк для определенного значения ключа соединения путем организации таблиц таким образом, чтобы наибольшие таблицы отображались последними в последовательности – Havnar

+0

@zuku, хорошая уловка. Для левого соединения, я думаю, чтобы убедиться, что показы без клика также могут иметь запись в конечном результате для вычисления CTR, правильно? –

ответ

1

Ваш способ получить СУУ довольно эффективным, хотя вы должны добавить тип или вы получите кучу нулей и единиц

ctr_result = foreach (group joined_feed by country) generate group as countryID, (double) SUM(clicked)/(double) COUNT(joined_feed) as ctr 
+0

Спасибо, Алексей, проголосуйте. Хотите знать, что порядок таблицы имеет значение как @Havnar, упомянутый выше? Благодарю. –

+1

@LinMa См. Https://pig.apache.org/docs/r0.9.2/perf.html#replicated-joins , если вы хотите повысить производительность (и если вы нажимаете на таблицу достаточно мало) – Alexey

+0

Спасибо, Алексей, проголосуйте , Я знаю реплицированное соединение. Мой вопрос больше о нормальном соединении в Pig, действительно ли порядок таблиц имеет значение? Вы можете сослаться на обсуждение между мной и Хавнаром. :) –

Смежные вопросы