我的问题是,我如何制作计数器,我可以在其中加入双打之类的东西(是的,我确实使用了LongValue,但这给了我0)?
答案 0 :(得分:4)
Hadoop MapReduce作业计数器定义为Java long
值。 MapReduce作业实现可以通过Counter
获取TaskAttemptContext
的句柄。
获取Counter
的句柄后,作业可以将计数器增加一个增量或将其设置为特定值。
http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/Counter.html#increment(long)
http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/Counter.html#setValue(long)
请注意,方法签名全部都是根据long
指定的。域模型不支持使用double
或任何其他数据类型作为计数器值。
如果绝对必要,那么您可以采用一些创造性的方式将数据类型编码为long
。一种方法是利用long
和double
都是64位宽的事实。然后,您可以使用Double#doubleToLongBits
将double
值编码为long
。
http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#doubleToLongBits(double)
但是,稍后理解这一点的唯一方法是编写自定义代码,在作业完成后解压缩该计数器值并将其传递给Double#longBitsToDouble
。
http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#longBitsToDouble(long)
但这对于Hadoop MapReduce作业计数器来说是非常不寻常的用法。
答案 1 :(得分:0)
作为一种解决方法,你可以做这样的事情
android:layout_margin="3dp"
在“驱动程序”中,您可以获得双倍值。
long convert = (long) (mydoubleVal * 10000);
context.getCounter(MyCounter.name1).setValue(convert);