用pig脚本获取好友id-需要文本操作

ar7v8xwq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(347)

这是我的意见

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

注意事项和要求
我需要去掉年龄=35
我需要得到与用户相关联的朋友号码(在输入一行将有一个用户)的用户
朋友的数量会有所不同,朋友的最大数量也不知道
预期结果

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
zf2sa74q

zf2sa74q1#

你可以创建一个自定义项来处理它,虽然你可以尝试下面的脚本,我只是在你的脚本中添加一行来替换'friend='为','现在你可以创建一个自定义项,它将从空格中拆分字符串,而不是替换first','为'-'

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)

相关问题