2

我想在 pig 中编写一个自定义加载 udf 来从目录结构加载文件。

目录结构就像一个电子邮件目录。它有一个名为 maildir 的根目录。在其中我们有各个邮件持有者的子目录。在每个邮件帐户持有者目录中都有几个子目录,如收件箱、已发送、垃圾箱等。

例如:maildir/mailholdername1/inbox/1.txt maildir/mailholdername2/sent/1.txt

我只想从所有 mailerholdername 子目录中读取收件箱文件。

我无法理解:

  1. 应该将什么作为参数传递给负载 udf
  2. 应该如何解析整个目录结构,只读取相应的收件箱文件。

我想处理一个文件并执行一些数据提取并将其加载为一条记录。因此,如果有 10 个文件,我会得到一个有 10 条记录的关系此外,我想对这些收件箱文件进行一些操作并提取一些数据。

4

1 回答 1

1

因为您有一个没有可变深度的已定义文件夹结构,所以我认为它就像传递以下模式作为您的输入路径一样简单:

A = LOAD 'maildir/*/inbox/1.txt' USING PigStorage('\t') AS (f1,f2,f3)

您可能不需要为此创建自己的 UDF,PigLoader 应该能够处理它们,假设它们采用某种分隔格式(上面的示例假设 3 个字段,制表符分隔)。

如果每个收件箱中有多个 txt 文件,请使用*.txt而不是1.txt. 最后,如果 maildir 根目录不在您的用户主目录中,您应该使用文件夹的绝对路径,比如/data/maildir/*/index/*.txt

于 2012-12-21T12:03:57.897 回答