我想知道是否有可能在猪/蜂巢中进行相应的几列转座。
处理我得到的数据要求
id jan feb march
1 j1 f1 m1
2 j2 f2 m2
3 j3 f3 m3
我需要将它转换为第一列,所以它看起来像 -
id value month
1 j1 jan
1 f1 feb
1 m1 march
2 j2 jan
2 f2 feb
2 m2 march
3 j3 jan
3 f3 feb
3 m3 march
我用java尝试过这个,但是为了让它进入分布式模式,有没有办法在pig / hive中做到这一点。
提前感谢你的帮助!!
答案 0 :(得分:2)
是的,这在Hive中使用内置的"堆栈" UDF和案例陈述。这样的事情应该有效:
select id, value, CASE
WHEN value like 'j%'
THEN 'jan'
WHEN value like 'f%'
THEN 'feb'
WHEN value like 'm%'
THEN 'march'
ELSE ''
END as month
from table
lateral view stack(3, jan, feb, march) tb as value
;
让我知道这是否有效。
答案 1 :(得分:1)
猪没有任何内置功能可以解决您的需求,但您可以尝试以下方法,我想这对您有用。
<强> input.txt中强>
1 j1 f1 m1
2 j2 f2 m2
3 j3 f3 m3
<强> PigScript:强>
A = LOAD 'input.txt' USING PigStorage() AS (id,month1,month2,month3);
B = FOREACH A GENERATE FLATTEN(TOBAG(TOTUPLE(id,month1,'jan'),TOTUPLE(id,month2,'feb'),TOTUPLE(id,month3,'mar')));
DUMP B;
<强>输出:强>
(1,j1,jan)
(1,f1,feb)
(1,m1,mar)
(2,j2,jan)
(2,f2,feb)
(2,m2,mar)
(3,j3,jan)
(3,f3,feb)
(3,m3,mar)