如何抑制猪产量的科学记数法

时间:2013-06-24 21:42:40

标签: hadoop apache-pig

这可能是一个很快的问题,但我试着谷歌搜索无济于事。基本上我的输出列中有一个输出,有时会变成科学记数法。

示例是3.9E-4。但是,如果数字足够大,它会将其保持为浮点状态,如0.08544751199999999。

我如何压制科学记数法?!

1 个答案:

答案 0 :(得分:2)

我认为有一种方法可以用Pig Latin来做到这一点。为了解决类似的问题,我给自己写了一个UDF,它只是String.format的包装器:

import java.io.IOException;

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

public class SPRINTF extends EvalFunc<String> {

    @Override
    public String exec(Tuple input) throws IOException {
        if (input.size() != 2) { return null; }

        String output = null;
        try {
            String format = (String) input.get(0);
            String value = input.get(1).toString();

            switch (format.charAt(format.length()-1)) {
            case 'b':
            case 'B':
            case 'h':
            case 'H':
            case 's':
            case 'S':
            case 'c':
            case 'C':
                output = String.format(format, value);
                break;
            case 'd':
            case 'o':
            case 'x':
            case 'X':
                output = String.format(format, Integer.parseInt(value));
                break;
            case 'e':
            case 'E':
            case 'f':
            case 'g':
            case 'G':
            case 'a':
            case 'A':
                output = String.format(format, Double.parseDouble(value));
                break;
            }

            return output;
        } catch (Exception e) { return null; }
    }

}

当然可以改进,但它应该让你知道如何开始。