繁体   English   中英

Scala - 如何过滤 KStream (Kafka Streams)

[英]Scala - How to filter KStream (Kafka Streams)

我是 Scala 的新手,我正在尝试根据第二个组件字段过滤 KStream[String, JsonNode]。

例如,工作的 Java 代码是这样的:

import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.kstream.Consumed;
import org.apache.kafka.streams.kstream.KStream;
import org.apache.kafka.streams.kstream.Produced;
...
import com.fasterxml.jackson.databind.JsonNode;
...
...
final KStream<String, JsonNode> source = streamsBuilder.stream(inputTopic,
                    Consumed.with(Serdes.String(), jsonSerde));


// filter and producer preprocessed
source.filter((k, v) -> v.get("total_cost").asDouble() > 0 && v.get("num_items").asInt() > 0)
    .to(outputTopic, Produced.with(Serdes.String(), jsonSerde));

我试过这个:

import org.apache.kafka.streams.kstream.{Produced,Consumed,KStream};
import org.apache.kafka.streams.StreamsBuilder;
...
import com.fasterxml.jackson.databind.JsonNode;
...
var source:KStream[String, JsonNode] = streamsBuilder.stream(inputTopic, Consumed.`with`(Serdes.String(), jsonSerde));

source.filter({
  case (k:String ,v:JsonNode) => 
    (v.get("total_cost").asDouble() > 0 && v.get("num_items").asInt() > 0)
  })
  .to(outputTopic, Produced.`with`(Serdes.String(), jsonSerde));

在上面的尝试中,我得到了:

说明 资源路径位置类型 缺少扩展函数的参数类型 必须完全了解匿名函数的参数类型。 (SLS 8.5) 预期类型是:org.apache.kafka.streams.kstream.Predicate[? >:字符串,? >:com.fasterxml.jackson.databind.JsonNode]

我也试过这个:

source.filter((_._2.get("total_cost").asDouble() > 0 && _._2.get("num_items").asInt() > 0))
  .to(outputTopic, Produced.`with`(Serdes.String(), jsonSerde));

我如何在 Scala 中过滤这个对象? 提前致谢。

org.apache.kafka.streams.kstream.Predicate来自 JavaAPI,在 Scala 2.11 (我假设你使用它)中你必须显式实现接口,因此:

source.filter(new Predicate[String, JsonNode]() {
  override def test(k: String, v: JsonNode): Boolean = {
    v.get("total_cost").asDouble() > 0 && v.get("num_items").asInt() > 0
  }
}).to(outputTopic, Produced.`with`(Serdes.String(), jsonSerde));

应该管用。

可以在此处找到有关SAM (单一抽象方法)的更多信息

请注意,您不必使用 Java API - 有一流的Scala API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM