我的问题是,我怎么做计数器,我可以把像double之类的东西放进去(是的,我确实用了longvalue,但它给了我0)?
dz6r00yl1#
hadoop mapreduce作业计数器定义为java long 价值观。mapreduce作业实现可以获得 Counter 通过 TaskAttemptContext .http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/taskattemptcontext.html#getcounter(java.lang.enum)在获得一个 Counter ,作业可以将计数器增量为增量,也可以将其设置为特定值。http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/counter.html#increment(长)http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/counter.html#setvalue(长)注意,方法签名都是按照 long . 域模型不支持使用 double 或任何其他数据类型作为计数器值。如果这是绝对必要的,那么您可以想出一些创造性的方法将您的数据类型编码为 long . 一种方法是利用这两个事实 long 以及 double 是64位宽。你可以用 Double#doubleToLongBits 编码 double 价值观 long .http://docs.oracle.com/javase/7/docs/api/java/lang/double.html#doubletolongbits(双倍)但是,以后理解这一点的唯一方法是编写自定义代码,在作业完成后解压计数器值并将其传递给服务器 Double#longBitsToDouble .http://docs.oracle.com/javase/7/docs/api/java/lang/double.html#longbitstodouble(长)不过,这将是hadoopmapreduce作业计数器的一个非常不寻常的用法。
long
Counter
TaskAttemptContext
double
Double#doubleToLongBits
Double#longBitsToDouble
ozxc1zmp2#
作为解决方法,你可以这样做
long convert = (long) (mydoubleVal * 10000); context.getCounter(MyCounter.name1).setValue(convert);
在driver中可以得到双值。
long c2 = job0.getCounters().findCounter(MyCounter.name1) .getValue(); double getMyVal= (double) c2 / 10000;
2条答案
按热度按时间dz6r00yl1#
hadoop mapreduce作业计数器定义为java
long
价值观。mapreduce作业实现可以获得Counter
通过TaskAttemptContext
.http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/taskattemptcontext.html#getcounter(java.lang.enum)
在获得一个
Counter
,作业可以将计数器增量为增量,也可以将其设置为特定值。http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/counter.html#increment(长)
http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/counter.html#setvalue(长)
注意,方法签名都是按照
long
. 域模型不支持使用double
或任何其他数据类型作为计数器值。如果这是绝对必要的,那么您可以想出一些创造性的方法将您的数据类型编码为
long
. 一种方法是利用这两个事实long
以及double
是64位宽。你可以用Double#doubleToLongBits
编码double
价值观long
.http://docs.oracle.com/javase/7/docs/api/java/lang/double.html#doubletolongbits(双倍)
但是,以后理解这一点的唯一方法是编写自定义代码,在作业完成后解压计数器值并将其传递给服务器
Double#longBitsToDouble
.http://docs.oracle.com/javase/7/docs/api/java/lang/double.html#longbitstodouble(长)
不过,这将是hadoopmapreduce作业计数器的一个非常不寻常的用法。
ozxc1zmp2#
作为解决方法,你可以这样做
在driver中可以得到双值。