2014-11-19 2 views
1

У меня есть два файла,PIG разбора строки входы

один является titles.csv и имеют идентификатор фильма и название с этим форматом:

999: Title 
734: Another_title 

другой представляет собой список идентификаторов пользователей, которые ссылаются на фильм

CategoryId: user1_id, ....

222: 120 
227: 414 551 
249: 555 

различных размеров (минимум один пользователь в жанре Categor y)

Цель состоит в первом разобрать строки так, чтобы каждый из них разбился на два (для обоих файлов), все до «:» и все после.

Я попытался сделать это

movies = LOAD .... USING PigStorage('\n') AS (line: chararray) 
users = LOAD .... USING PigStorage('\n') AS (line: chararray) 

-- parse 'users'/outlinks, make a list and count fields 
tokenized = FOREACH users GENERATE FLATTEN(TOKENIZE(line, ':')) AS parameter; 
filtered = FILTER tokenized BY INDEXOF(parameter, ' ') != -1; 
result = FOREACH filtered GENERATE SUBSTRING(parameter, 2, (int)SIZE(parameter)) AS number; 

Но это где я застрял/запутаться. Мысли?

Я также должен вывести первые 10 записей, у которых есть большинство идентификаторов пользователя во второй части строки.

ответ

1

попробовать, как этот

movies = LOAD 'file1' AS titleLine; 
A = FOREACH movies GENERATE FLATTEN(REGEX_EXTRACT_ALL(titleLine,'^(.*):\\s+(.*)$')) AS (movieId:chararray,title:chararray); 

users = LOAD 'file2' AS userLine; 
B = FOREACH users GENERATE FLATTEN(REGEX_EXTRACT_ALL(userLine,'^(.*):\\s+(.*)$')) AS (categoryId:chararray,userId:chararray); 

output1:

(999,Title) 
(734,Another_title) 

Выход2:

(222,120) 
(227,414 551) 
(249,555) 
Смежные вопросы