hadoop - 使用 PIG 脚本获取 friend ID - 需要文本操作

标签 hadoop apache-pig bigdata

这是我的意见

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/

相关文章:

hadoop - Hadoop pig -用逗号装载 float

java - 使用具有无效时区的 ToDate()

sql - 如何通过在连接子句中使用子字符串函数在 Big Query 中执行两个表之间的连接

hadoop - 我可以关闭哪些服务来触发第二次应用程序尝试?

hadoop - Hbase Schema 嵌套实体

将 R 与 SimpleDB 或 BigQuery 结合使用或将 PHP 与 SimpleDB 结合使用的建议

hadoop - 从 pig 中的分组数据生成二元组合

java - 从文件加载大 HashMap<String, TreeMap> 会给出 java.lang.OutOfMemoryError(超出 GC 开销限制)

hadoop - Hive - 如何查询表以获取其自己的名称?

hadoop - Pig 脚本不适用于 MapReduce