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 加载文件

如何使用 apache pig 在 hadoop 集群上加载文件?

如何使用 PIG 将数据从本地系统加载到 hdfs

hadoop pig - 用逗号加载浮点数

hadoop/pig导入日志的多级目录

hadoop pig:无法加载sqooped数据