pig load udf用于从多个子目录加载文件

时间:2012-12-21 05:55:50

标签: hadoop user-defined-functions apache-pig

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

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

例如:maildir / mailholdername1 / inbox / 1.txt     邮件目录/ mailholdername2 /发送/ 1.txt的

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

我无法理解:

  1. 应该作为参数
  2. 传递给load udf的内容
  3. 如何解析整个目录结构,只读取相应的收件箱文件。
  4. 我想处理一个文件并执行一些数据提取并将其作为一个记录加载。如果有10个文件,我得到一个有10条记录的关系 此外,我想对这些收件箱文件进行一些操作并提取一些数据。

1 个答案:

答案 0 :(得分: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