时间:2010-07-23 20:16:41

标签: hadoop apache-pig

1 个答案:

答案 0 :(得分:2)

我认为你不能在Pig等待它。

类似于您想要做的解决方案是在UDF中加载映射文件,然后处理FOREACH中的每个记录。 PiggyBank LookupInFiles中提供了一个示例。建议使用DistributedCache而不是直接从DFS复制文件。

DEFINE MAP_PRODUCT com.example.ourudf.Mapper('hdfs://../mappings.txt');

data = LOAD 'input.txt' USING PigStorage() AS (name:chararray, category:chararray);

output = FOREACH data GENERATE title, MAP_PRODUCT(category);

如果您的映射文件不是太大,这将有效。如果它不适合内存,则必须对映射文件进行分区并多次运行脚本,或者通过添加行号来调整映射文件的模式,并使用本机join和嵌套的FOREACH ORDER BY / LIMIT 1每个产品。