pig解析字符串输入

mdfafbf1  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(251)

我有两份档案,
其中一个是titles.csv,具有以下格式的电影id和标题:

999: Title
734: Another_title

另一个是链接到电影的用户id列表
categoryid:user1\u 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个条目。

b5buobof

b5buobof1#

像这样试试

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)

输出2:

(222,120)
(227,414 551)
(249,555 )

相关问题