作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在 pig 中编写自定义加载 udf,用于从目录结构加载文件。
目录结构就像一个电子邮件目录。它有一个名为 maildir 的根目录。在这个目录中,我们有个人邮件持有者的子目录。在每个邮件帐户持有者目录中,都有几个子目录,如收件箱、已发送、垃圾箱等。
例如:maildir/mailholdername1/inbox/1.txt maildir/mailholdername2/sent/1.txt
我只想读取所有 mailerholdername 子目录中的收件箱文件。
我无法理解:
我想处理一个文件并执行一些数据提取并将其作为一条记录加载。因此,如果有 10 个文件,我得到一个包含 10 条记录的关系此外,我想对这些收件箱文件做一些操作并提取一些数据。
最佳答案
因为你有一个没有可变深度的定义文件夹结构,我认为它就像将以下模式作为输入路径传递一样简单:
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
关于hadoop - pig load udf 用于从多个子目录加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984972/
我是一名优秀的程序员,十分优秀!