这是我的意见
user0=242561&friend=6226&friend=93856&age=35&friend=35900
user1=242562&friend=6226&friend=93856&age=35&friend=35900
user2=242563&friend=6226&friend=93856&age=35&friend=35900&friend=33900&friend=34900
user3=242564&friend=6226&friend=93856&age=35&friend=35900&friend=35930&friend=35920&friend=35901
注意事项及要求
- 我需要删除 age=35
- 我需要获取与该用户相关联的 friend 号的用户(在输入中,一行将有一个用户
好友数会不一样,最大好友数未知
预期结果
user0=242562-6226,93856,35900
user1=242562-6226,93856,35900
user2=242562-6226,93856,35900,33900,34900
user3=242562-6226,93856,35900,35930,35920,35901
我尝试过类似的方法,但没有成功
inputs = LOAD '/data/friends4' AS (line:chararray);
tokenized = FOREACH inputs GENERATE FLATTEN(TOKENIZE(line, '&')) AS parameter;
filtered = FILTER tokenized BY INDEXOF(parameter, 'age=') != 0;
dump filtered;
我越来越像
(user=242562)
(friend=6226)
(friend=93856)
(friend=35900)
(user1=242562)
(friend=6226)
(friend=93856)
(friend=35900)
(user2=242562)
(friend=6226)
(friend=93856)
(friend=35900)
(friend=33900)
(friend=34900)
(user3=242562)
(friend=6226)
(friend=93856)
(friend=35900)
(friend=35930)
(friend=35920)
(friend=35901)
现在我需要如下结果,有人可以帮忙吗
user0=242562-6226,93856,35900
user1=242562-6226,93856,35900
user2=242562-6226,93856,35900,33900,34900
user3=242562-6226,93856,35900,35930,35920,35901
最佳答案
您可以创建 UDF 以正确且简单的方式处理它,尽管您可以尝试使用以下脚本,但我只是在您的脚本中添加一行以将 'friend=' 替换为 ',' 现在您可以创建一个 UDF这将从空格中拆分字符串,而不是将第一个 ',' 替换为 '-'
inputs = LOAD '/data/friends4' AS (line:chararray);
tokenized = FOREACH inputs GENERATE FLATTEN(TOKENIZE(line, '&')) AS parameter;
filtered = FILTER tokenized BY INDEXOF(parameter, 'age=') != 0;
REPL1 = FOREACH filtered GENERATE REPLACE($0, 'friend=', ',');
dump REPL1;
输出
(user0=242561)
(,6226)
(,93856)
(,35900 user1=242562)
(,6226)
(,93856)
(,35900 user2=242563)
(,6226)
(,93856)
(,35900)
(,33900)
(,34900 user3=242564)
(,6226)
(,93856)
(,35900)
(,35930)
(,35920)
(,35901)
关于hadoop - 使用 PIG 脚本获取 friend ID - 需要文本操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35356120/