这可能是一个很快的问题,但我试着谷歌搜索无济于事。基本上我的输出列中有一个输出,有时会变成科学记数法。
示例是3.9E-4。但是,如果数字足够大,它会将其保持为浮点状态,如0.08544751199999999。
我如何压制科学记数法?!
答案 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; }
}
}
当然可以改进,但它应该让你知道如何开始。