在早期版本的scalding
中,其API中仍未引入counters
。 Hadoop Counters In Scalding建议如何在烫伤中回退到级联计数器
def addCounter(pipe : Pipe, group : String, counter : String) = {
pipe.each(() -> ('addCounter)) ( fields =>
new BaseOperation[Any](fields) with Function[Any] {
def operate(flowProcess : FlowProcess[_],
functionCall : FunctionCall[Any]) {
try {
flowProcess.asInstanceOf[HadoopFlowProcess]
.increment(group, counter, 1L)
functionCall.getOutputCollector.add(new Tuple(new Array[Object](1) : _*))
} catch {
case cce: ClassCastException =>
// HadoopFlowProcess is not available in local mode
}
}.discard('addCounter)
}
)
}
然而,当我尝试时,我得到了:
Error:(74, 14) ';' expected but '.' found.
}.discard('addCounter)
^
我错过了什么吗?
我使用的烫伤版本: 0.8.7
答案 0 :(得分:2)
.discard
是一个烫伤命令,因此应与.each
处于同一级别,即代码块中的另一个烫伤命令。尝试将它放在最后一个右括号后面#34;)"。 (您发布的代码中的第二行。)
此处,操作被链接到RichPipe管道,首先是each
,然后是discard
:
pipe.each(...){predicate}.discard(...)