scala - 你如何在 sbt 中链接 spark 和 kafka?

标签 scala sbt apache-spark apache-kafka

我需要在 spark 中使用来自 kafka 项目的符号(使用 DefaultDecoder 而不是 StringDecoder)。由于这些符号在 kafka 中,我需要在我的 sbt 项目中链接 kafka 和 spark。这是隔离我的确切问题的简化 sbt 文件:

name := """spark-kafka"""                                                                                           

version := "1.0"                                                                                                         

scalaVersion := "2.10.4"                                                                                                 

lazy val root = (project in file("."))                                                                                   

libraryDependencies ++= Seq(                                                                                             
  "org.apache.kafka"           % "kafka_2.10"           % "0.8.2.0",                                                     
  "com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.1.2",                                                       
  "org.apache.spark"              %% "spark-core"       % "1.2.1" % "provided"                                           
)   

如果我尝试使用 sbt compile 构建它,我会得到这个错误:

> compile
[info] Updating {file:/home/rick/go/src/defend7/sparksprint/tools/consumer/}root...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[error] impossible to get artifacts when data has not been loaded. IvyNode = org.slf4j#slf4j-api;1.6.1
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) java.lang.IllegalStateException: impossible to get artifacts when data has not been loaded. IvyNode = org.slf4j#slf4j-api;1.6.1
[error] Total time: 8 s, completed Feb 21, 2015 1:37:05 PM

这与我在独立性较低的大型 sbt 项目中遇到的错误相同,因此我认为这个较小的 sbt 文件恰好隔离了我面临的问题。

我试图理解“数据”sbt 在“未加载数据时无法获取工件”中谈论的内容,并且还尝试了一些常见的补救措施(例如在中明确包含 slf4j-api 1.6.1我的 libraryDependencies),但这让我到目前为止一无所获。

我真的被困住了,非常感谢任何帮助。谢谢!

最佳答案

这看起来像是 Ivy 深处某个地方的冲突解决问题。它可以通过手动从 Kafka 中排除 slf4j 依赖项并显式添加对最新版本的依赖项来修复:

libraryDependencies ++= Seq(                                                                                             
  "org.apache.kafka"           % "kafka_2.10"           % "0.8.2.0" excludeAll(
    ExclusionRule(organization = "org.slf4j")
  ),                                                     
  "com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.1.2",      
  "org.slf4j"                  % "slf4j-api"            % "1.7.10", 
  "org.apache.spark"           %% "spark-core"          % "1.2.1" % "provided"                                           
)   

关于scala - 你如何在 sbt 中链接 spark 和 kafka?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651790/

相关文章:

python - 在 pyspark 中查找类型为 array<double> 的两列之间的余弦相似度

apache-spark - Spark : out of memory when broadcasting objects

scala - 如何在 RDD[(String, Int)] 上的 saveAsTextFile 时删除记录周围的括号?

scala - 初学者:Scala 2.10中的Scala类型别名?

scala - 无法在 Chisel3 中使用 PeekPokeTester 打印

sbt - 如何运行聚合更新报告?

java - akka-持久化与 Play 框架

apache-spark - 向 Spark DataFrame 添加一列并为其计算值

scala - 如何使用带管道的多字符分隔符进行拆分?

scala - 标准化和不可变数据模型