Я расскажу о своих предыдущих question. В основном у меня эти два набора данных. И используя имена места размещения, я хочу вывести, сколько раз каждое место происходило в сообщениях твита. Ответ, который я получаю, хорош для небольших наборов данных, но представьте, что у меня есть 10000 мест и 20000 сообщений в твиттере, используя CROSS
, что даст мне отношение с 200m records, что довольно много.Свинья - попытка избежать CROSS
Простой набор данных представлен в предыдущем вопросе, и скрипт PIG, который я использую в данный момент, указан в ответе. Я ищу идеи, как сделать этот подсчет без продукта CROSS
. Благодаря!
REGISTER piggybank.jar
venues = LOAD 'venues_mid' USING org.apache.hcatalog.pig.HCatLoader();
tweets = LOAD 'tweets_mid' USING org.apache.hcatalog.pig.HCatLoader();
tweetsReduced = foreach tweets generate text;
venuesReduced = foreach venues generate name;
/* Create the Cartesian product of venues and tweets */
crossed = CROSS venuesReduced, tweetsReduced;
/* For each record, create a regex like '.*name.*' */
regexes = FOREACH crossed GENERATE *, CONCAT('.*', CONCAT(venuesReduced::name, '.*')) AS regex;
/* Keep tweet-venue pairs where the tweet contains the venue name */
venueMentions = FILTER regexes BY text MATCHES regex;
venueCounts = FOREACH (GROUP venueMentions BY venuesReduced::name) GENERATE group, COUNT($1) as counter;
venueCountsOrdered = order venueCounts by counter;
STORE venueCountsOrdered INTO 'Pig_output/venueCountsOrdered_mid.csv'
USING org.apache.pig.piggybank.storage.CSVExcelStorage(',', 'NO_MULTILINE', 'WINDOWS');
tweets.csv
created_at,text,location
Sat Nov 03 13:31:07 +0000 2012, Sugar rush dfsudfhsu, Glasgow
Sat Nov 03 13:31:07 +0000 2012, Sugar rush ;dfsosjfd HAHAHHAHA, London
Sat Apr 25 04:08:47 +0000 2009, at Sugar rush dfjiushfudshf, Glasgow
Thu Feb 07 21:32:21 +0000 2013, Shell gggg, Glasgow
Tue Oct 30 17:34:41 +0000 2012, Shell dsiodshfdsf, Edinburgh
Sun Mar 03 14:37:14 +0000 2013, Shell wowowoo, Glasgow
Mon Jun 18 07:57:23 +0000 2012, Shell dsfdsfds, Glasgow
Tue Jun 25 16:52:33 +0000 2013, Shell dsfdsfdsfdsf, Glasgow
venues.csv
city,name
Glasgow, Sugar rush
Glasgow, ABC
Glasgow, University of Glasgow
Edinburgh, Shell
London, Big Ben
Да, но в этом случае я засчитываю только случаи, когда место встречи упоминается в твиттере, опубликованном в том же городе, где находится это место, что не должно быть. –
отредактировал ответ-добавить «Еще одна попытка:« –
Хорошо, так что кажется, что это будет мой первый UDF, тогда:) ваше решение звучит разумно. Однако, если кто-то придумает решение без UDF, более чем можно поделиться с ним. –