【问题标题】:Why does sbt fail to find KafkaUtils?为什么 sbt 找不到 KafkaUtils?
【发布时间】:2019-06-06 18:21:39
【问题描述】:

我在使用 SBT 编译的代码(来自 Kafka 的 wordCount)中有这个错误

[error] /home/hduser/sbt_project/project1/src/main/scala/sparkKafka.scala:4:35:            object kafka is not a member of package org.apache.spark.streaming`
[error] import org.apache.spark.streaming.kafka.KafkaUtils
 not found: value KafkaUtils
[error] val lines = KafkaUtils.createStream(ssc, "localhost:2181", "spark-stream           ing-consumer-group", Map("customer" -> 2))

文件build.sbt 包含这些依赖项:

libraryDependencies += "org.apache.spark" % "spark-core_2.12" % "2.4.0"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.12" % "2.4.0"
libraryDependencies += "org.apache.spark" % "spark-streaming-kafka-0-10_2.12" % "2.4.0"

如何正确导入KafkaUtils

【问题讨论】:

    标签: scala apache-spark apache-kafka sbt spark-streaming


    【解决方案1】:

    KafkaUtils 位于 org.apache.spark.streaming.kafka010 包中(请注意,导入的命名空间包括版本 kafka010)。

    来自Spark Streaming Kafka Documentation

    import org.apache.spark.streaming.kafka010._
    // ...
    
    // val streamingContext = ...
    
    val kafkaParams = Map[String, Object](
      "bootstrap.servers" -> "localhost:9092",
      "key.deserializer" -> classOf[StringDeserializer],
      "value.deserializer" -> classOf[StringDeserializer],
      "group.id" -> "use_a_separate_group_id_for_each_stream",
      "auto.offset.reset" -> "latest",
      "enable.auto.commit" -> (false: java.lang.Boolean)
    )
    
    val topics = Array("topicA", "topicB")
    val stream = KafkaUtils.createDirectStream[String, String](
      streamingContext,
      PreferConsistent,
      Subscribe[String, String](topics, kafkaParams)
    )
    

    注意:通常建议改用Spark Structured Streaming with Kafka

    【讨论】:

    • 谢谢。但是在val stream = KafkaUtils.createDirectStream[String, String] 行中我插入什么来代替Stringval lines= KafkaUtils.createDirectStream[000.000.000.000:2181, String]这样我有2个错误
    • Nothing... 这些是键和值类型,对应于classOf[StringDeserializer]... 您会因为更改它而出错。如果您的主题具有键和值的字符串,则此代码按原样工作。您唯一需要的是streamingContext。同样,不要使用:2181 连接到 Kafka
    • 谢谢,但我仍然有错误:......[error] cannot be applied to (String, scala.collection.immutable.Map[String,Object]) [error] Subscribe[String, String](topics, kafkaParams) [error] ^ [error] one error found [error] (Compile / compileIncremental) Compilation failed [error] Total time: 2 s, completed Jan 14, 2019 1:30:35 PM我从link复制了代码
    • 抱歉,我不知道^ 箭头指向什么,但我认为您在该行之前写了一些东西,这导致了问题。请编辑最初的问题以格式化完整的错误和您的新代码。但是,我认为发布一个新问题会更好,因为我认为我们已经解决了找不到您的 KafkaUtils 类的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2015-02-26
    • 2023-04-11
    • 2019-01-08
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多