ApachePig—需要通过pig脚本实现生成序列号的etl逻辑

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

我有一个当前的etl逻辑,我必须在pig中实现它。如果传入值为null或空白,etl逻辑将为列创建唯一的序列号。
需要通过Pig来完成。

xpszyzbs

xpszyzbs1#

您可以使用秩生成序列号,但在您的条件下,它有点不同您正在检查该值是“0”还是“null”,然后只有您在分配序列号。。
我的观点是,你应该使用自定义项。。

package pig.test;

import java.io.IOException;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;

public class SequenceNumber extends EvalFunc<Integer> {
    static int cnt = 0;
    public Integer exec(Tuple v) throws IOException{
        int a = (Integer)v.get(0);

        if(a == 0) {
            cnt++ ;
            return new Integer(cnt);
        }
        else
            return new Integer(a);
    }

}

在清管器中:

--Replace all null with 0 

Step-1 A1 = foreach A generate *, (id is null ? 0 : id) as sq;
Step-2 T1 = foreach A1 generate sq,<your_fields>,<your_fields>; 
Step-3 Result = foreach T1 generate sqno(*),<your_fields>,<your_fields>;

希望这会有帮助!!

相关问题