Hadoop Pig 从加载 glob 获取子目录名称并在存储中使用它
Posted
技术标签:
【中文标题】Hadoop Pig 从加载 glob 获取子目录名称并在存储中使用它【英文标题】:Hadoop Pig get subdirectory names from load glob and use it in store 【发布时间】:2014-01-22 17:18:47 【问题描述】:我有这个目录结构:
/topLevel
|
-A
|
-B
|
...
目录的名称(A、B 等。不是静态的。它们可能会随着时间而改变)。
我知道我可以在 load 函数中使用 glob 来加载 topLevel 下的所有文件:
load ('/topLevel/*')
我需要在 topLevel 下使用相同的子目录名称来存储结果。对于以上内容,我想存储到:
/results
|
-A_results
|
-B_results
|
...
这是不可能的,但我想这样做:
store ('/results/*_results')
为了匹配负载全局...
在 Pig 下,如何获取加载 glob 中子目录的名称并在 store 中使用?
【问题讨论】:
【参考方案1】:你不能这样做。一旦您将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';
【讨论】:
以上是关于Hadoop Pig 从加载 glob 获取子目录名称并在存储中使用它的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Pig Latin 的 Hadoop HDFS 加载文件