Hadoop Pig将一个表中的数字乘以另一个表中的所有值
我有两张桌子:Hadoop Pig将一个表中的数字乘以另一个表中的所有值,hadoop,apache-pig,Hadoop,Apache Pig,我有两张桌子: A: (feature:chararray, value:float) B:(multiplier:charray, value:float) 其中A是一个有数千行的表,B只有一行 我要做的是取A中的所有行,用A乘以B e、 g 我想要一张C表 C: [('f1', 3), ('f2', 4.6)] 有什么简单的方法吗?你可以做一个交叉和交叉。。。生成 X = A CROSS B; Y = FOREACH X GENERATE A::feature, A::value *
A: (feature:chararray, value:float)
B:(multiplier:charray, value:float)
其中A是一个有数千行的表,B只有一行
我要做的是取A中的所有行,用A乘以B
e、 g
我想要一张C表
C: [('f1', 3), ('f2', 4.6)]
有什么简单的方法吗?你可以做一个
交叉和交叉。。。生成
X = A CROSS B;
Y = FOREACH X GENERATE A::feature, A::value * B::value;
上述代码尚未测试。您可以对每个。。。生成
X = A CROSS B;
Y = FOREACH X GENERATE A::feature, A::value * B::value;
上述代码尚未测试。如果您非常确定第二个表只有一行,则取第一列 第二个表的,并硬编码与第一个表中最后一列相同的值,然后 做内部连接,你可以很容易地增加 假设第一个文件为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;
如果您非常确定第二个表只有一行,那么选择第一列 第二个表的,并硬编码与第一个表中最后一列相同的值,然后 做内部连接,你可以很容易地增加 假设第一个文件为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;