Hadoop Pig从load glob获取子目录名称并在商店中使用它

时间:2014-01-22 17:18:47

标签: hadoop apache-pig

我有这个目录结构:

/topLevel
   |
    -A
   |
    -B
   |
    ...

目录的名称(A,B等等。不是静态的。它们可能会随着时间的推移而改变。)

我知道我可以在load函数中使用glob来加载topLevel下的所有文件:

load ('/topLevel/*')

我需要在topLevel下使用相同的子目录名来存储结果。对于上述内容,我想存储到:

/results
   |
    -A_results
   |
    -B_results
   |
    ...

这是不可能的,但我想这样做:

store ('/results/*_results')

匹配负载水球...

在Pig下,如何在加载glob中获取子目录的名称并在商店中使用它?

1 个答案:

答案 0 :(得分:0)

你不能这样做。将topLevel内的所有数据加载到Pig别名后,原始文件名的所有内存都将丢失。您在Pig中有一个别名,因此您的输出将位于单个目录中。

如果你想这样做,我建议使用参数替换,然后使用Bash脚本多次运行Pig脚本,每个输入目录一次。类似的东西:

for dir in topLevel/*
do
    pig -p input=$dir -p output=results/${dir#topLevel/} myScript.pig
done

myScript.pig的内容为

A = LOAD '$input';
...
STORE X INTO '$output';
相关问题