gpt4 book ai didi

java - 以下错误中发现的和必需的之间有什么区别

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:51 25 4
gpt4 key购买 nike

在处理 Scala Kafka KeyValueMapper 实现时,我收到以下错误。我不确定到底有什么区别。感谢您的帮助。

代码:

  1. 我从主题创建了一个 KTable

    val creducer: Reducer[java.lang.Long] =
    (v1, v2) => if (v1 > v2) v1 else v2

    val deduplicationWindow = TimeWindows
    .of(60000L * 10)
    .advanceBy(60000L)
    .until(60000L * 10)

    val ktwindow: KTable[Windowed[String], java.lang.Long] =
    ipandTime
    .groupByKey(Serdes.String(), Serdes.Long())
    .reduce(creducer, deduplicationWindow, "ktwindow-query")
  2. 当我尝试使用 Windowed[String] 键创建流时,使用 selectKey 方法时出现错误。 java 中的类似实现效果很好。

    val fStream = ktwindow
    .toStream()
    .selectKey(
    new KeyValueMapper[Windowed[String],
    java.lang.Long,
    KeyValue[String, java.lang.Long]] {
    override def apply(
    key: Windowed[String],
    value: java.lang.Long): KeyValue[String, java.lang.Long] = {
    new KeyValue(key.key(), value)
    }
    }
    )
[error]  found   : org.apache.kafka.streams.kstream.KeyValueMapper[org.apache.kafka.streams.kstream.Windowed[String],Long,org.apache.kafka.streams.KeyValue[String,Long]]

[error] required: org.apache.kafka.streams.kstream.KeyValueMapper[_ >: org.apache.kafka.streams.kstream.Windowed[String], _ >: Long, _ <: KR]

最佳答案

变量ipandTime无处可寻,因此我将其替换为???,但这与实际问题没有任何关系。

正如我所说,如果 Java 使用站点通配符的类型推断失败,则只需添加显式类型参数即可。这里针对 Kafka 1.1.0 进行编译:

import org.apache.kafka.streams.kstream._
import org.apache.kafka.common.serialization._
import org.apache.kafka.streams.KeyValue


object Q49594920 {

val creducer: Reducer[java.lang.Long] =
(v1, v2) => if (v1 > v2) v1 else v2

val deduplicationWindow = TimeWindows
.of(60000L * 10)
.advanceBy(60000L)
.until(60000L * 10)

val ktwindow: KTable[Windowed[String], java.lang.Long] = ???
// ipandTime // What's that? It's not defined anywhere!
// .groupByKey(Serdes.String(), Serdes.Long())
// .reduce(creducer, deduplicationWindow, "ktwindow-query")

val fStream = ktwindow
.toStream()
.selectKey[KeyValue[String, java.lang.Long]](
new KeyValueMapper[Windowed[String],
java.lang.Long,
KeyValue[String, java.lang.Long]] {
override def apply(
key: Windowed[String],
value: java.lang.Long): KeyValue[String, java.lang.Long] = {
new KeyValue(key.key(), value)
}
}
)
}

selectKey 方法需要一个泛型类型参数 KR,因此我只需为它提供具体类型 KeyValue[String, java.lang.Long],然后它就可以工作了。

关于java - 以下错误中发现的和必需的之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com