Scala WindowFunction不编译

Scala WindowFunction不编译,scala,apache-flink,flink-streaming,Scala,Apache Flink,Flink Streaming,我一直在使用ApacheFlink编写一个原型应用程序。在这个过程中,我选择使用org.apache.flink.streaming.api.functions.windowing.WindowFunction作为特定用例。然而,在编写apply函数的主体时,我遇到了这个错误。下面的代码不是来自我正在编写的应用程序-我的数据类型不同-它来自Flink文档站点中提供的示例代码: import scala.collection.Iterable import scala.collection.Map

我一直在使用ApacheFlink编写一个原型应用程序。在这个过程中,我选择使用org.apache.flink.streaming.api.functions.windowing.WindowFunction作为特定用例。然而,在编写apply函数的主体时,我遇到了这个错误。下面的代码不是来自我正在编写的应用程序-我的数据类型不同-它来自Flink文档站点中提供的示例代码:

import scala.collection.Iterable
import scala.collection.Map
import org.apache.flink.streaming.api.functions.windowing.WindowFunction
import org.apache.flink.streaming.api.windowing.windows.{TimeWindow}
import org.apache.flink.util.Collector
import scala.collection.JavaConversions._

class MyWindowFunction extends WindowFunction[(String, Long), String, String, TimeWindow] {

  def apply(key: String, window: TimeWindow, input: Iterable[(String, Long)], out: Collector[String]): Unit = {
    var count = 0L
    for (in <- input) {
      count = count + 1
    }
    out.collect(s"Window $window count: $count")
  }
}
我已检查应用中参数的顺序;他们似乎是对的


由于某种原因,我未能找到错误的确切来源。有人能帮我找到解决办法吗?

我找到了这个错误的原因

我不清楚的是,Apache Flink的API需要一个java.lang.Iterable,而不是它的Scala等价物:

class MyWindowFunction extends 
      WindowFunction[(String, Long), String, String, TimeWindow] {

  override 
  def apply(
      key: String, 
      w: TimeWindow, 
      iterable: Iterable[(String, Long)],  // from java.lang.Iterable
      collector: Collector[String]): Unit = {

      // ....
  }
}
因此,我必须适当地导入:

import java.lang.Iterable   // From Java
import java.util.Map        // From Java

import org.apache.flink.streaming.api.functions.windowing.WindowFunction
import org.apache.flink.streaming.api.windowing.windows.TimeWindow
import org.apache.flink.util.Collector

import scala.collection.JavaConversions._  // Implicit conversions

 class MyWindowFunction 
   extends WindowFunction[(String, Long), String, String, TimeWindow] {

   override 
   def apply(
       key: String, 
       w: TimeWindow, 
       iterable: Iterable[(String, Long)], 
       collector: Collector[String]): Unit = {

     // ....

  }
}
一切都很好

import java.lang.Iterable   // From Java
import java.util.Map        // From Java

import org.apache.flink.streaming.api.functions.windowing.WindowFunction
import org.apache.flink.streaming.api.windowing.windows.TimeWindow
import org.apache.flink.util.Collector

import scala.collection.JavaConversions._  // Implicit conversions

 class MyWindowFunction 
   extends WindowFunction[(String, Long), String, String, TimeWindow] {

   override 
   def apply(
       key: String, 
       w: TimeWindow, 
       iterable: Iterable[(String, Long)], 
       collector: Collector[String]): Unit = {

     // ....

  }
}