如何为关系分配一个顺序递增的数字

时间:2013-03-28 15:50:09

标签: apache-pig

我想知道是否有办法在关系中创建一个新字段,然后为它分配一些顺序递增的数字?这是一个例子:

ordered_products = ORDER products BY price ASC;
ordered_products_with_sequential_id = FOREACH ordered_products GENERATE price, some_sequential_id;

如何创建some_sequential_id?我不确定猪是否可行。

1 个答案:

答案 0 :(得分:1)

我怀疑你必须编写自己的UDF来运行它。一种方法是在AtomicInteger实现中增加UDF中的静态变量(exec)。

public class IncrEval extends EvalFunc<Long> {

    final static AtomicLong res = new AtomicLong(0);

    @Override
    public Long exec (Tuple tip) throws IOException {
        if (tip == null || tip.size() == 0) {
            return null;
        }

        res.incrementAndGet();
        return res.longValue();
    }
}

猪脚本条目:
b = FOREACH a GENERATE <something>, com.eval.IncrEval() AS ID:long;