基于级联的Scalding(旧版本)计数器

时间:2015-01-21 10:47:48

标签: scala hadoop scalding

在早期版本的scalding中,其API中仍未引入countersHadoop 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

1 个答案:

答案 0 :(得分:2)

.discard是一个烫伤命令,因此应与.each处于同一级别,即代码块中的另一个烫伤命令。尝试将它放在最后一个右括号后面#34;)"。 (您发布的代码中的第二行。)

此处,操作被链接到RichPipe管道,首先是each,然后是discard

pipe.each(...){predicate}.discard(...)