pig拉丁语中的多变量声明在内存方面有什么缺点吗?

9rnv2umw  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(284)

我读过很多关于pig的讨论,我注意到每一行都需要声明一个变量。
如果要声明新变量,有什么缺点吗?
谢谢!

jyztefdp

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很聪明,可以跟上,但它仍然不是一个好的做法。在尝试读取程序(我指的是哪一个?)和读取错误消息时,它会导致混淆。

相关问题