如何重命名关系中的字段

xmq68pz9  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(408)

考虑以下代码:

ebook = LOAD '$ebook' USING PigStorage AS (line:chararray);
ranked = RANK ebook;

关系 ranked 有两个字段:行号和文本。文本称为 line 和可由此别名引用,但生成的行号 RANK 没有。因此,我唯一能引用它的方法是 $0 .
我怎么能给你 $0 一个名称,以便在它被加入到另一个数据集并且不再是 $0 ?

qeeaahzv

qeeaahzv1#

可以使用foreach作为

named_ranked = FOREACH ranked GENERATE $0 as r,*;
qnakjoqk

qnakjoqk2#

您要做的是为您的数据定义一个模式。最简单的方法是使用 AS 就像你用钥匙一样 LOAD .
可以使用三个运算符定义架构: 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食谱中看到类似的行为。

相关问题