在pig中重用变量

ttp71kqs  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(373)

我的Pig有一些记忆问题。
所以这是我的密码。

a = load 'some file'; 
b = load 'file2';
cond = load 'cond file';

c = union a,b;
cc = join c by $0, cond by $0;
dd = foreach cc generate $0,$1;
reduce = foreach(group dd generate by random()) generate flatten (dd);

cc = join c by $1, cond by $0;
dd = foreach cc generate $1,$2;
reduce2 = foreach(group dd generate by random()) generate flatten (dd);

final = union reduce, reduce2; 

store final into 'final_output';

代码有问题吗?我试着运行它,并在一个小样本大小的测试,它似乎很好。但我不确定这是否会有任何我不知道的暗示。
忽略代码质量,因为我知道这不是编写脚本或代码的好方法。不过,这只是一个一次性脚本。

bfhwhh0e

bfhwhh0e1#

简而言之:没有问题。
长话短说:pig拉丁变量和其他编程语言变量一样。你有一个java程序,你为目的a声明了一个变量,然后你决定为目的b、目的c等重用这个变量。这种方法没有错,只要它符合你的最终结果。大多数以性能为中心的代码都是通过位操作来实现的,这类代码在嵌入式系统中最常见。在您的用例中,pig拉丁语用于批量处理巨大的数据集/事件。因此,一个进程的数据量无法与嵌入式系统相比。重用变量不应该给性能带来任何额外的好处。这种方法的缺点是您的etl管道将很难读取/理解,并且可能会产生更多的bug。因此,这不是推荐的做法。

相关问题