pig将一个表中的数字乘以另一个表的所有值

y0u0uwnf  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(291)

我有两张table:

A: (feature:chararray, value:float)

B:(multiplier:charray, value:float)

其中a是一个有数千行的表,而b只有一行。
我要做的是取a中的所有行,用a.value乘以b.value。
例如

A:[('f1', 1.5) , ('f2', 2.3)]

B:[('mul', 2)]

我想要一张c表

C: [('f1', 3), ('f2', 4.6)]

有没有简单的方法?

w8f9ii69

w8f9ii691#

如果您非常确定第二个表只有一行,那么就取第一列
并硬编码与第一个表中最后一列相同的值,然后
做内部连接,你可以很容易地乘
假设第一个文件为plain.txt

(f1,1.5)
(f2,2)

这是第二个文件multi.txt

(mul,2)

A = load '/user/cloudera/inputfiles/plain.txt' USING PigStorage(',') AS(feature:chararray,value:double);

B = load '/user/cloudera/inputfiles/multi.txt' USING PigStorage(',') AS(operation:chararray,no:int); 

C = foreach A generate feature,value,'mul' as ope;  

D = join C by ope, B by operation; 

E = foreach D generate feature,(value*no) as multiplied_value;
31moq8wy

31moq8wy2#

你可以做一个 CROSS 和一个 FOREACH ... GENERATE .

X = A CROSS B;
Y = FOREACH X GENERATE A::feature, A::value * B::value;

以上代码尚未测试。

相关问题