考虑以下代码:
ebook = LOAD '$ebook' USING PigStorage AS (line:chararray); ranked = RANK ebook;
关系 ranked 有两个字段:行号和文本。文本称为 line 和可由此别名引用,但生成的行号 RANK 没有。因此,我唯一能引用它的方法是 $0 .我怎么能给你 $0 一个名称,以便在它被加入到另一个数据集并且不再是 $0 ?
ranked
line
RANK
$0
qeeaahzv1#
可以使用foreach作为
named_ranked = FOREACH ranked GENERATE $0 as r,*;
qnakjoqk2#
您要做的是为您的数据定义一个模式。最简单的方法是使用 AS 就像你用钥匙一样 LOAD .可以使用三个运算符定义架构: LOAD , STREAM 以及 FOREACH . 在这里,最简单的方法是:
AS
LOAD
STREAM
FOREACH
ebook = LOAD '$ebook' USING PigStorage AS (line:chararray); ranked = RANK ebook; renamed_ranked = foreach B generate $0 as rank, $1;
您可以在相关文档中找到更多信息。知道此操作不会向脚本中添加迭代也是件好事。正如@arnonrotem gal oz所说:pig不会以一种连续的方式执行操作,也就是说,它不会进行所有的排序,然后对所有记录进行另一次迭代。pig优化器将在分配秩时进行重命名。你可以在Pig食谱中看到类似的行为。
2条答案
按热度按时间qeeaahzv1#
可以使用foreach作为
qnakjoqk2#
您要做的是为您的数据定义一个模式。最简单的方法是使用
AS
就像你用钥匙一样LOAD
.可以使用三个运算符定义架构:
LOAD
,STREAM
以及FOREACH
. 在这里,最简单的方法是:您可以在相关文档中找到更多信息。
知道此操作不会向脚本中添加迭代也是件好事。正如@arnonrotem gal oz所说:
pig不会以一种连续的方式执行操作,也就是说,它不会进行所有的排序,然后对所有记录进行另一次迭代。pig优化器将在分配秩时进行重命名。你可以在Pig食谱中看到类似的行为。