2016-09-06 4 views
0

Извините за неправильное формулирование вопроса. Я новичок в stackoverflow, а также я совершенно новый для PIG и пытаюсь самостоятельно экспериментировать.PIG: CONCAT A отношение OUTPUT к другому RELATION

У меня есть сценарий обработки файлов words.t и data.txt.

words.txt

word1 
word2 
word3 
word4 

data.txt

{"created_at":"18:47:31,Sun Sep 30 2012","text":"RT @Joey7Barton: ..give a word1 about whether the americans wins a Ryder cup. I mean surely he has slightly more important matters. #fami ...","user_id":450990391,"id":252479809098223616} 

мне нужно, чтобы получить выход, как

(word1_epochtime) {полные данные, которые соответствуют в атрибуте текста}

ie

(word1_1234567890){"created_at":"18:47:31,Sun Sep 30 2012","text":"RT @Joey7Barton: ..give a word1 about whether the americans wins a Ryder cup. I mean surely he has slightly more important matters. #fami ...","user_id":450990391,"id":252479809098223616} 

Я получил вывод как

(word1) { "created_at": "18: 47: 31, Вс Сен 30 2012", "Текст": "RT @ Joey7Barton:. .give a word1 о том, выигрывают ли американцы кубок Райдера. Я имею в виду, что у него есть несколько более важные вопросы. #fami ... "" user_id ": 450990391," идентификатор ":. 252479809098223616}

с помощью этого сценария

load words.txt 
load data.txt 
c = cross words,data; 
d = FILTER c BY (data::text MATCHES CONCAT(CONCAT('.*',words::word),'.*')); 
e = foreach (group d BY word) {data); 

, и я получил epochtime со словами, как

time = FOREACH words GENERATE CONCAT(CONCAT(word,'_'),(chararray)ToUnixTime(CurrentTime(created_at)); 

Но я не могу Concat слова со временем.

Как я могу получить выход как

(word1_time){data} 

Пожалуйста, не стесняйтесь предлагать мне вышеуказанное. Спасибо.

ответ

0

Per this reference, CONCAT принимает в качестве входных данных два «поля». Я думаю, что в вашем случае проблема (chararray)ToUnixTime(CurrentTime()), не является именем поля. Вы можете сгенерировать поле, которое представляет текущее значение временной метки и использовать его в вашей функции concat.

+0

спасибо за ваш повтор Amit. На самом деле это моя ошибка, что я не упомянул об этом правильно. Я получаю эпоху, основанную на атрибуте created_at. Я отредактировал вопрос. Не могли бы вы перепроверить один раз. Пожалуйста, предложите мне. – Bunny

1

Я думаю, что получил выход. вот сценарий, который я написал.

d = FILTER c BY (data::text MATCHES CONCAT(CONCAT('.*',word::word),'.*')); 
e = FOREACH d GENERATE CONCAT(CONCAT(word,'_'),(chararray)ToUnixTime(CurrentTime(created_at))) as epochtime; 
f = foreach (group e BY epochtime) {data} 
dump f;