Parsing PIG解析字符串输入

Parsing PIG解析字符串输入,parsing,apache-pig,Parsing,Apache Pig,我有两份档案 一个是titles.csv,具有以下格式的电影ID和标题: 999: Title 734: Another_title 另一个是链接到电影的用户ID列表 categoryID:user1_id 222: 120 227: 414 551 249: 555 不同大小(每个流派类别至少有一个用户) 我们的目标是首先解析字符串,以便将它们分别拆分为两个(对于两个文件),“:”之前的所有内容和之后的所有内容。 我试过这样做 movies = LOAD .... USING PigSt

我有两份档案

一个是titles.csv,具有以下格式的电影ID和标题:

999: Title
734: Another_title
另一个是链接到电影的用户ID列表

categoryID:user1_id

222: 120
227: 414 551
249: 555 
不同大小(每个流派类别至少有一个用户)

我们的目标是首先解析字符串,以便将它们分别拆分为两个(对于两个文件),“:”之前的所有内容和之后的所有内容。

我试过这样做

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;
但这正是我陷入困境/困惑的地方。想法

我还应该在字符串的第二部分输出用户ID最多的前10个条目

像这样试试看

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);
输出1:

(999,Title)
(734,Another_title)
(222,120)
(227,414 551)
(249,555 )
输出2:

(999,Title)
(734,Another_title)
(222,120)
(227,414 551)
(249,555 )