我对在 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
关键字就无法实现预期输出的特殊场景?一头雾水;请说明它的用途以及我将在哪些情况下使用它。
最佳答案
根据 Pig 文档:
有关更多详细信息,请查看 this link 他们已经通过示例清楚地解释了 FLATTEN 的用法
关于hadoop - pig :FLATTEN keyword,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28290030/