猪:FLATTEN关键字

Posted

技术标签:

【中文标题】猪:FLATTEN关键字【英文标题】:Pig:FLATTEN keyword 【发布时间】:2015-02-03 01:45:04 【问题描述】:

我对在 PIG 中使用 FLATTEN 关键字感到有些困惑。

考虑以下数据集:

tuple_record: details: (firstname: chararray,lastname: chararray,age: int,sex: chararray)

不使用FLATTEN,我可以像这样访问一个字段(假设是名字):

display_firstname = FOREACH tuple_record GENERATE details.firstname;

现在,使用 FLATTEN 关键字:

flatten_record = FOREACH tuple_record GENERATE FLATTEN(details);

DESCRIBE 给了我这个:

flatten_record: details::firstname: chararray,details::lastname: chararray,details::age: int,details::sex: chararray

因此我可以直接访问没有dereferencing 的字段,如下所示:

display_record = FOREACH flatten_record GENERATE firstname;

我与FLATTEN 关键字相关的问题是:

1) 两者中哪种方式(即使用或不使用FLATTEN)是实现相同输出的优化方式?

2) 任何特殊情况下,不使用FLATTEN 关键字,无法达到预期的输出?

完全糊涂了;请说明它的用途以及我将在哪些情况下使用它。

【问题讨论】:

【参考方案1】:
    有时您的数据包或元组中有数据,并且您想删除该级别的嵌套。 当您想要动态切换数据并按特定字段分组时,您需要一种方法将这些条目从包中提取出来。

根据 Pig 文档:

FLATTEN 运算符在语法上看起来像一个 UDF,但它是 实际上是一个改变元组和包结构的操作符 UDF 无法做到的方式。展平未嵌套的元组和袋子。这 想法是一样的,但是每个人的操作和结果都不一样 结构类型。

更多详情请查看this link,他们已经通过示例清楚地解释了 FLATTEN 的用法

【讨论】:

以上是关于猪:FLATTEN关键字的主要内容,如果未能解决你的问题,请参考以下文章

用这个开源项目来解决你团队里猪队友泄露公司敏感信息的问题

PyTorch基础(15)-- torch.flatten()方法

PyTorch基础(15)-- torch.flatten()方法

PyTorch基础(15)-- torch.flatten()方法

PyTorch基础(15)-- torch.flatten()方法

PyTorch基础(15)-- torch.flatten()方法