pig:flatten keyword

qncylg1j  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(410)

我对使用 FLATTEN Pig的关键字。
考虑以下数据集:

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` 关键词,不能达到预期的输出?
完全困惑;请说明它的用途,以及我将在哪些情况下使用它。
93ze6v8z

93ze6v8z1#

有时您在包或元组中有数据,并且希望删除该级别的嵌套。
当您想在运行中切换数据并按特定字段分组时,您需要一种方法将这些条目从包中取出。
根据清管器文件:
flatten操作符在语法上看起来像一个udf,但实际上是一个操作符,它以一种udf所不能的方式改变元组和包的结构。扁平联合国巢元组以及袋。其思想是相同的,但每种结构的操作和结果是不同的。
更多细节请查看这个链接,他们用例子清楚地解释了flatten的用法

相关问题