Apache pig 如何在pig中存储和使用变量

Apache pig 如何在pig中存储和使用变量,apache-pig,Apache Pig,我有一个元组存储在: {group: chararray,word_count: long} 所以,我求所有word_count变量的和,并将其存储在变量T中: T: {long} 现在,我有一个变量X,看起来像: (word1,12,word1,1) (word2,22,word2,4) (word3,32,word3,14) 我需要对存储在T中的值进行1,4和14的数学运算, 但我的for-each不认识t result = FOREACH X GENERATE $3*T; 它失败了

我有一个元组存储在:

{group: chararray,word_count: long}
所以,我求所有word_count变量的和,并将其存储在变量T中:

T: {long}
现在,我有一个变量X,看起来像:

(word1,12,word1,1)
(word2,22,word2,4)
(word3,32,word3,14)
我需要对存储在T中的值进行1,4和14的数学运算, 但我的for-each不认识t

result = FOREACH X GENERATE $3*T;
它失败了。它不能识别t,因为在X中没有称为t的字段

所以,我做的是,我穿过X和T 温度=交叉X,T


这是正确的方法吗??我对猪不熟悉。我的解决方案似乎不是很优雅

不幸的是,您选择的方式是最好的方式。Pig没有独立变量的概念。你认为是一个变量,
T
,实际上是一个只有一个元组和一个字段的关系。Pig一次操作一条记录,如果该记录或内部参数(由
%DEFAULT
或命令行参数定义)中没有可用的数据,则不能使用它

我对您的方法所做的一个修改是,使用
CROSS
将读入这两个关系,执行叉积,然后将其写回磁盘。这是浪费资源。相反,您可以使用
JOIN
并使用“replicated”(复制)利用特殊指令
。这将指示Pig将第二个关系存储在内存中,并在映射阶段执行联接,而不是将数据发送到还原程序、执行联接并将其写入磁盘

temp=使用“复制”将X与1、T与1连接起来


通过虚拟值
1
进行连接,使
连接
相当于一个
交叉
使用“复制的”
T
放入内存中,这样就可以在映射阶段完成,从而与相邻的MR作业结合起来。

非常感谢!!!我是PIG和hadoop的初学者。你有什么好书推荐吗?看看O'Reilly的书编程猪。