我有这个目录结构:
/topLevel
|
-A
|
-B
|
...
目录的名称(A,B等等。不是静态的。它们可能会随着时间的推移而改变。)
我知道我可以在load函数中使用glob来加载topLevel下的所有文件:
load ('/topLevel/*')
我需要在topLevel下使用相同的子目录名来存储结果。对于上述内容,我想存储到:
/results
|
-A_results
|
-B_results
|
...
这是不可能的,但我想这样做:
store ('/results/*_results')
匹配负载水球...
在Pig下,如何在加载glob中获取子目录的名称并在商店中使用它?
答案 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';