HadoopPig从load glob获取子目录名并在存储中使用

lyr7nygr  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(307)

我有这样的目录结构:

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

目录(a、b等)的名称。。不是静态的。它们可能会随着时间的推移而改变)。
我知道我可以在load函数中使用glob来加载toplevel下的所有文件:

load ('/topLevel/*')

我有一个要求,使用相同的子目录名下的顶级存储结果。对于以上内容,我想存储到:

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

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

store ('/results/*_results')

要匹配加载全局。。。
在pig下,如何获取loadglob中的子目录的名称并在store中使用它?

dzhpxtsq

dzhpxtsq1#

你不能这样做。一旦你加载了里面的所有数据 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';

相关问题