PIG:研究许多文件
Posted
技术标签:
【中文标题】PIG:研究许多文件【英文标题】:PIG : research in many files 【发布时间】:2016-06-21 18:10:50 【问题描述】:我是 PIG 的新手,我有一个问题。不知道有没有可能。
首先,我有一个文件:
?(A, B, C, D) :- File1(A), File2(B), File3(C), File4(A, B), File5 (A, C), File6(C, B) , 文件 7(A, D)。
我必须在 PIG 中创建一个脚本,获取这个文件,然后,对于每个条目,研究文件中的参数 ...
比如这个,脚本要在File1中找到参数A,在File2中找到B,File3C ...
但我不知道有多少文件。它们只能有 1 个或 2 个参数。
我可以轻松加载这些文件,它们都有 2 列。
对于每个文件
A = 使用 PigStorage (':') 加载 'FileX' 作为 (Col1:chararray, Col2:chararray);
B = 按 Col1 == X AND Col2== Y 过滤 A;
使用 PigStorage(' ') 将 B 存储到“结果”中;
这种类型的代码可能吗?
在第二种方式中,我想用相同的参数重新组合文件: 对于 File1、File5 和 File7 通过一个组,或者什么... 避免重复相同的过滤。 我做了很多测试,但我没有发现任何有用的东西。 谢谢你:)
【问题讨论】:
您的第一个文件是否也在 hdfs 中? 是的,它也在 Hdfs 中:) 【参考方案1】:这种类型的代码可能吗?
不,Pig 只是一个数据流,没有控制流。
Pig Latin 是一种数据流语言。不同于通用编程 语言,它不包括控制流结构,例如 if 和 为了。 ref.
您可以将 Pig 脚本嵌入 python java 或 java-script 脚本以启用流控制,请参阅here。
【讨论】:
谢谢,我不太明白如何将 java 脚本合并到 pig 脚本中,但我会尝试!我可以在同一个脚本中重新组合吗?或者我必须创建 2 个脚本(我的意思是一个 un pig 和另一个在 java 中?) 你只会得到一个java程序,请查看上面的链接。【参考方案2】:你可能在这里有一个shell脚本和pig的组合。
你的猪脚本应该看起来像
A = load '$inputfile' using PigStorage (':') as (Col1:chararray, Col2:chararray);
B = filter A by Col1 == X AND Col2== Y;
STORE B INTO 'result' using PigStorage(' ');
然后你从 shell 调用这个 pig 脚本
你可以做一个
for a in `hadoop fs cat <firstfile> | awk -F "," 'print $0'`
do
pig -f script.pig -param inputfile=$a
done
【讨论】:
但是如果只有1个参数就不行了,对吧?我不能用这个加入相同的参数。以上是关于PIG:研究许多文件的主要内容,如果未能解决你的问题,请参考以下文章
用于压缩和解压缩 bzip2 中的 hdfs 数据的 Pig 脚本