【发布时间】:2014-09-25 17:38:51
【问题描述】:
我需要以下用例的帮助:
最初我们会加载一些文件并处理这些记录(或更严格地说是元组)。经过这样的处理,最后我们得到了以下形式的元组:
(some_field_1, hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00000, some_field_3)
(some_field_1, hdfs://localhost:9000/user/kailashgupta/data/2/part-r-00000, some_field_3)
(some_field_1, hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00001, some_field_3)
所以基本上,元组将文件路径作为其字段的值(我们显然可以将这个只有一个字段的元组以文件路径作为值或转换为只有一个字段的单个元组,并带有一些分隔符(比如逗号)分隔字符串)。
所以现在我必须在 Pig 脚本中加载这些文件,但我无法这样做。您能否建议如何进一步进行。我想到了使用高级foreach 运算符并尝试如下:
data = foreach tuples_with_file_info {
fileData = load $2 using PigStorage(',');
....
....
};
但它不起作用。
编辑: 为简单起见,假设我有一个单元组,其中一个字段具有文件名:
(hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00000)
【问题讨论】:
-
您不能在嵌套的 FOREACH 中编写 LOAD 语句,它不支持。
-
@Gaurav,还有其他解决方案吗?
-
也许,预处理文件并将它们放在 1 目录下?或者创建具有多个加载函数的动态 PIG 脚本 - 每个文件 1 个 - 然后将所有数据源联合起来?
-
我确实理解了这个问题。您的一个 i/p 数据确定输入文件路径,并且您要加载这些文件。我的上述评论仍然有效。
-
@GauravPhapale,我们无法预处理,因为当时不知道要选择哪个文件。此信息是在运行时从其他输入中提取的。您能否阐明“创建具有多个加载功能的动态 PIG 脚本 - 每个文件 1 个”的意思?
标签: hadoop mapreduce apache-pig