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 脚本

使用 mapreduce 解析 twitter json:Java、Pig

Pig:使用 .pig_schema 模式文件加载数据

使用 Pig 解析 XML 文件

从 pig 脚本运行时,PIG 未从 hdfs 读取文件

可以使用 PIG 读取的文件格式