我读过很多关于pig的讨论,我注意到每一行都需要声明一个变量。如果要声明新变量,有什么缺点吗?谢谢!
jyztefdp1#
每一行都是一个处理步骤,您需要将结果放在某个地方,以便在后续步骤中使用它。所以我不确定在行首没有变量的情况下你会怎么做。因为您可能知道,我想您是在问是否需要为每行变量选择一个新的变量名,如果您通过重新使用现有名称来节省资源的话。艾伦·盖茨(alan gates,o'reilly)的《编程Pig》(programming pig)一书对此进行了明确阐述,因此我将简单引用相关段落:pig拉丁语是一种数据流语言。每个处理步骤都会产生一个新的数据集或关系。在input=load“data”中,input是加载数据集数据所产生的关系的名称。关系名称称为别名。关系名称看起来像变量,但实际上不是。任务一旦完成,就是永久性的。可以重用关系名称;例如,这是合法的:
A = load 'NYSE_dividends' (exchange, symbol, date, dividends); A = filter A by dividends > 0; A = foreach A generate UPPER(symbol);
但是,不建议这样做。这里看起来好像你在重新分配一个关系,但实际上你正在创建一个叫做a的新关系,失去了一个叫做a的旧关系的踪迹。Pig很聪明,可以跟上,但它仍然不是一个好的做法。在尝试读取程序(我指的是哪一个?)和读取错误消息时,它会导致混淆。
1条答案
按热度按时间jyztefdp1#
每一行都是一个处理步骤,您需要将结果放在某个地方,以便在后续步骤中使用它。所以我不确定在行首没有变量的情况下你会怎么做。因为您可能知道,我想您是在问是否需要为每行变量选择一个新的变量名,如果您通过重新使用现有名称来节省资源的话。艾伦·盖茨(alan gates,o'reilly)的《编程Pig》(programming pig)一书对此进行了明确阐述,因此我将简单引用相关段落:
pig拉丁语是一种数据流语言。每个处理步骤都会产生一个新的数据集或关系。在input=load“data”中,input是加载数据集数据所产生的关系的名称。关系名称称为别名。关系名称看起来像变量,但实际上不是。任务一旦完成,就是永久性的。可以重用关系名称;例如,这是合法的:
但是,不建议这样做。这里看起来好像你在重新分配一个关系,但实际上你正在创建一个叫做a的新关系,失去了一个叫做a的旧关系的踪迹。Pig很聪明,可以跟上,但它仍然不是一个好的做法。在尝试读取程序(我指的是哪一个?)和读取错误消息时,它会导致混淆。