ApachePig:转换袋列

1l5u6lss  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(262)

我有一个pig问题,涉及到将包转换为列,详细信息如下:

(267720, {(201607),(201606),(201605)}, {(1),(3),(0)})
(806571, {(201607),(201606),(201605)}, {(28),(76),(75)})

我想把它转换成:

266720 201607 1
266720 201606 3
266720 201605 0 
806571 201607 28
806571 201606 76 
806571 201605 75

我试过:

JG3 = FOREACH JG2 GENERATE company_id, flatten(date) as date, Flatten(new_hire) as newhire;

但无法实现日期和newhire之间的精确匹配,会出现重复日期。
有人知道我该怎么做吗?提前谢谢!

jvlzgdj9

jvlzgdj91#

使用tobag()

JG3 = FOREACH JG2 GENERATE company_id, FLATTEN(TOBAG($1)), FLATTEN(TOBAG($2));
8nuwlpux

8nuwlpux2#

你这样做的方式将创建笛卡尔产品的日期和新的雇用列。如果您可以控制这些数据-在创建行李之前进行Map。如果没有,那么您必须编写udf来生成这个一对一Map。

相关问题