Почему сборка sbt в проекте Spark завершается с ошибкой "Пожалуйста, добавьте любые зависимости Spark, указав sparkVersion и sparkComponents"?
Я работаю над sbt-управляемым проектом Spark с spark-cloudant
зависимость. Код доступен на GitHub (на spark-cloudant-compile-issue
филиал).
Я добавил следующую строку в build.sbt
:
"cloudant-labs" % "spark-cloudant" % "1.6.4-s_2.10" % "provided"
Так что build.sbt
выглядит следующим образом:
name := "Movie Rating"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies ++= {
val sparkVersion = "1.6.0"
Seq(
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
"org.apache.spark" %% "spark-streaming-kafka" % sparkVersion % "provided",
"org.apache.spark" %% "spark-mllib" % sparkVersion % "provided",
"org.apache.kafka" % "kafka-log4j-appender" % "0.9.0.0",
"org.apache.kafka" % "kafka-clients" % "0.9.0.0",
"org.apache.kafka" %% "kafka" % "0.9.0.0",
"cloudant-labs" % "spark-cloudant" % "1.6.4-s_2.10" % "provided"
)
}
assemblyMergeStrategy in assembly := {
case PathList("org", "apache", "spark", xs @ _*) => MergeStrategy.first
case PathList("scala", xs @ _*) => MergeStrategy.discard
case PathList("META-INF", "maven", "org.slf4j", xs @ _* ) => MergeStrategy.first
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
unmanagedBase <<= baseDirectory { base => base / "lib" }
assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
Когда я выполню sbt assembly
Я получаю следующую ошибку:
java.lang.RuntimeException: Please add any Spark dependencies by
supplying the sparkVersion and sparkComponents. Please remove:
org.apache.spark:spark-core:1.6.0:provided
2 ответа
ПРИМЕЧАНИЕ. Я до сих пор не могу воспроизвести проблему, но думаю, что это не имеет значения.
java.lang.RuntimeException: пожалуйста, добавьте любые зависимости Spark, предоставив sparkVersion и sparkComponents.
В вашем случае ваш build.sbt
пропускает sbt resolver, чтобы найти spark-cloudant
зависимость. Вы должны добавить следующую строку в build.sbt
:
resolvers += "spark-packages" at "https://dl.bintray.com/spark-packages/maven/"
ПРОТИП Я настоятельно рекомендую использовать spark-shell
сначала и только тогда, когда вам удобно переключать пакет на sbt (особенно если вы новичок в sbt и, возможно, в других библиотеках / зависимостях). Это слишком много, чтобы переварить за один укус. Следуйте https://spark-packages.org/package/cloudant-labs/spark-cloudant.
Вероятно, связано: https://github.com/databricks/spark-csv/issues/150
Можете ли вы попробовать добавить spIgnoreProvided := true
на ваш build.sbt
?
(Это может быть не ответ, и я мог бы просто оставить комментарий, но у меня недостаточно репутации)