【问题标题】:what is the distinction between an 'outer bag' and an 'inner bag' in pigLatin?pigLatin 中的“外袋”和“内袋”有什么区别?
【发布时间】:2013-10-08 01:27:21
【问题描述】:

手册/文档广泛使用“内袋”和“外袋”的语言(例如:http://pig.apache.org/docs/r0.11.1/basic.html),但我无法明确区分这些术语的精确定义。

例如所有内在相关的:

  • 如果我给您一个袋子“foo”,您需要知道什么才能将 foo 标记为“内袋”与“外袋”?
  • 不是最外层的“任何包”就是“内包”吗?
  • 内部和外部的标签总是排他的吗?
  • 在 PigLatin 中,所有的“包”都是“关系”——还是只是“最外层的包”是关系? (和内袋不是关系)

创建一个可讨论的例子:

grunt> dump A;      
(1,2,3)
(4,2,1)
(8,3,4)
(4,3,3)


grunt> W1 = GROUP A   ALL;         
grunt> W2 = GROUP W1  ALL;
grunt> W3 = GROUP W2  ALL;
grunt> W4 = GROUP W3  ALL;

grunt> describe W4;
W4: {group: chararray,W3: {(group: chararray,W2: {(group: chararray,W1: {(group: chararray,A: {(f1: int,f2: int,f3: int)})})})}}


grunt> illustrate W4;
(1,2,3)
---------------------------------------------------
| A     | f1:int      | f2:int      | f3:int      | 
---------------------------------------------------
|       | 1           | 2           | 3           | 
|       | 8           | 3           | 4           | 
---------------------------------------------------
------------------------------------------------------------------------------------------------
| W1     | group:chararray      | A:bag{:tuple(f1:int,f2:int,f3:int)}                          | 
------------------------------------------------------------------------------------------------
|        | all                  | {(1, 2, 3), (8, 3, 4)}                                       | 
------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------
| W2     | group:chararray      | W1:bag{:tuple(group:chararray,A:bag{:tuple(f1:int,f2:int,f3:int)})}                                         | 
-----------------------------------------------------------------------------------------------------------------------------------------------
|        | all                  | {(all, {(1, 2, 3), (8, 3, 4)})}                                                                             | 
-----------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| W3     | group:chararray      | W2:bag{:tuple(group:chararray,W1:bag{:tuple(group:chararray,A:bag{:tuple(f1:int,f2:int,f3:int)})})}                                                        | 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|        | all                  | {(all, {(all, {(1, 2, 3), (8, 3, 4)})})}                                                                                                                   | 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| W4     | group:chararray      | W3:bag{:tuple(group:chararray,W2:bag{:tuple(group:chararray,W1:bag{:tuple(group:chararray,A:bag{:tuple(f1:int,f2:int,f3:int)})})})}                                                                       | 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|        | all                  | {(all, {(all, {(all, {(1, 2, 3), (8, 3, 4)})})})}                                                                                                                                                         | 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

grunt> dump W4;
(all,{(all,{(all,{(all,{(1,2,3),(4,2,1),(8,3,4),(4,3,3)})})})})

在袋子中 - W1、W2、W3、W4 - 哪个是内部的,哪个是外部的?

【问题讨论】:

    标签: apache-pig


    【解决方案1】:

    外层包其实是关系A。这有点奇怪,但一旦你知道什么是内袋,它就会变得清晰。让我们看看W1,为了便于阅读,因为嵌套包不会改变答案。

    W1 的架构和输出:

    W1: {group:chararray, A:bag{:tuple(f1:int,f2:int,f3:int)}}
    (all,{(1, 2, 3), (8, 3, 4)})
    

    我们可以看到它们是W1 中的一个字段,名为A,它是一个包。这是一个内包,因为包是关系中的一个字段。

    请记住,包只是无序的元组集,我们可以看到这是W1 的输出。现在,看看关系A的输出:

    (1,2,3)
    (4,2,1)
    (8,3,4)
    (4,3,3)
    

    Pig 不保证这些元组的顺序(除非你ORDER 或其他东西)。所以,如果你仔细想想,A 关系实际上只是一个无序元组集。这是一个外袋。

    你可以找到这个here的一些例子。

    【讨论】:

    • 这有帮助,谢谢。我想我现在明白了:没有其他袋子包含的袋子是“外袋”;也恰好是“关系”。如果它包含任何袋子,那么每个都是“内袋”(而不是“外袋”)。
    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2021-10-25
    • 2013-09-03
    • 2014-01-12
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多