Apache flink 无法使用WindowsStream.apply()函数应用WindowFunction
我对使用ApacheFlink和Scala还比较陌生,我刚刚掌握了一些基本功能。我在尝试实现自定义的Apache flink 无法使用WindowsStream.apply()函数应用WindowFunction,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我对使用ApacheFlink和Scala还比较陌生,我刚刚掌握了一些基本功能。我在尝试实现自定义的WindowFunction时遇到了麻烦 问题是,当我尝试实现自定义的WindowFunction时,IDE在“.apply()”函数上给出了一个错误 Cannot resolve symbol apply Unspecified value parameters: foldFunction: (NotInferedR, Data.Fingerprint) => NotInferedR,
WindowFunction
时遇到了麻烦
问题是,当我尝试实现自定义的WindowFunction
时,IDE在“.apply()”函数上给出了一个错误
Cannot resolve symbol apply
Unspecified value parameters: foldFunction: (NotInferedR, Data.Fingerprint) => NotInferedR, windowFunction: (Tuple, TimeWindow, Iterable[NotInferedR], Collector[NotInferedR]) => Unit
Unspecified value parameters: foldFunction: FoldFunction[Data.Fingerprint, NotInferedR], function: WindowFunction[NotInferedR, NotInferedR, Tuple, TimeWindow]
Unspecified value parameters: function: WindowFunction[Data.Fingerprint, NotInferedR, Tuple, TimeWindow]
Unspecified value parameters: windowFunction: (Tuple, TimeWindow, Iterable[Data.Fingerprint], Collector[NotInferedR]) => Unit
Type mismatch, expected: (Tuple, TimeWindow, Iterable[Data.Fingerprint], Collector[NotInferedR]) => Unit, actual: DataTimeWindow.DataWindow
Type mismatch, expected: WindowFunction[Data.Fingerprint, NotInferedR, Tuple, TimeWindow], actual: DataTimeWindow.DataWindow
这是我的代码:
val test = hashMap
.keyBy("hash")
.timeWindow(Time.minutes(1))
.apply(new DataWindow())
这是窗口函数
:
class DataWindow extends WindowFunction[Data.Fingerprint, String, String, TimeWindow] {
override def apply(key: String,
window: TimeWindow,
input: Iterable[Fingerprint],
out: Collector[String]) {
out.collect("helo")
}
}
我认为问题在于
WindowFunction
的第三个类型参数,即键的类型。由于您将keyBy
方法中的键声明为字符串(keyBy(“hash”)
),因此无法在编译时确定键的类型。有两个选项可以解决此问题:
keyBy
中的KeySelector
函数提取密钥(类似于keyBy(x:FingerPrint=>x.hash)
)。KeySelector
函数的返回类型在编译时已知,因此您可以使用键入的WindowFunction
WindowFunction
的第三个类型参数的类型更改为Tuple
Tuple
是由keyBy
提取的密钥的通用持有者。在您的情况下,它将是一个Tuple1
,可以通过Tuple1.f0
访问哈希字符串您好@fabian,我添加了
keyBy((x:Data.Fingerprint)=>x.hash)
,在我的“数据窗口”类中,我将String
更改为Tuple1[String]
,但我遇到了相同的问题。您是同时做了这两个更改还是一个接一个地尝试了这两个更改?如果更改密钥提取程序
,则应将密钥类型保留为字符串
。我尝试了这两种解决方案。我解决了此问题,我需要导入org.apache.flink.streaming.api.scala.function.WindowFunction
notorg.apache.flink.streaming.api.functions.windowing.WindowFunction
感谢@fabian在这个问题上花点时间。谢谢Flinkoob@FabianHueske是否有任何方法可以在错误中给出其他提示或更改导入?这真令人困惑