我对在 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/

    10-16 07:39