我想在pig中编写一个自定义加载udf,用于从目录结构加载文件。
目录结构就像一个电子邮件目录。它有一个名为maildir的根目录。在此我们有各个邮件持有者的子目录。每个mailaccount持有者目录都有几个子目录,如收件箱,已发送,垃圾等。
例如:maildir / mailholdername1 / inbox / 1.txt 邮件目录/ mailholdername2 /发送/ 1.txt的
我想只读取所有mailerholdername子目录中的收件箱文件。
我无法理解:
我想处理一个文件并执行一些数据提取并将其作为一个记录加载。如果有10个文件,我得到一个有10条记录的关系 此外,我想对这些收件箱文件进行一些操作并提取一些数据。
答案 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