2016-12-03 1 views
2

Je travaille sur un projet Spark géré par sbt avec la dépendance spark-cloudant. Le code est available on GitHub (on spark-cloudant-compile-issue branch).Pourquoi l'assembly sbt dans le projet Spark échoue-t-il avec "Veuillez ajouter des dépendances Spark en fournissant les composants sparkVersion et sparkComponents"?

J'ai ajouté la ligne suivante à build.sbt:

"cloudant-labs" % "spark-cloudant" % "1.6.4-s_2.10" % "provided" 

Et build.sbt se présente comme suit:

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) 

Quand j'exécute sbt assembly je reçois l'erreur suivante:

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 

Répondre

1

NOTE Je ne peux pas reproduire le problème, mais pense qu'il n'a pas vraiment matière.

java.lang.RuntimeException: Please add any Spark dependencies by supplying the sparkVersion and sparkComponents.

Dans votre cas, votre build.sbt manque un résolveur SBT pour trouver spark-cloudant dépendance. Vous devez ajouter la ligne suivante à build.sbt:

resolvers += "spark-packages" at "https://dl.bintray.com/spark-packages/maven/" 

Protip Je recommande fortement d'utiliser spark-shell d'abord et que lorsque vous êtes à l'aise avec le commutateur de package à SBT (en particulier si vous êtes nouveau SBT et peut-être. autres bibliothèques/dépendances aussi). C'est trop digérer en une bouchée. Suivez https://spark-packages.org/package/cloudant-labs/spark-cloudant.

1

Probablement similaire: https://github.com/databricks/spark-csv/issues/150Si vous essayez d'ajouter spIgnoreProvided := true à votre build.sbt?

(Cela pourrait ne pas être la réponse et je pourrais avoir juste posté un commentaire mais je n'ai pas assez réputation)

+0

Pourquoi pensez-vous que 'spIgnoreProvided: = true' aurait pu aider? Quel (s) plugin (s) serait-il utilisé? –