2016-06-03 36 views
0

Ich habe den folgenden Code:Fehlgeschlagen Datenquelle zu finden: Parkett, beim Bau mit sbt Montage

val testRDD: RDD[(String, Vector)] = sc.parallelize(testArray) 

val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
import sqlContext.implicits._ 

val df = testRDD.toDF() 

df.write.parquet(path) 

mit folgendem build.sbt:

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1" 
libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.6.1" 
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "1.6.1" 

// META-INF discarding 
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => 
{ 
    case "reference.conf" => MergeStrategy.concat 
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard 
    case x => MergeStrategy.first 
} 
} 

Wenn ich bauen diese mit sbt- Montage (ich habe addSbtPlugin ("com.eed3si9n" % "sbt-assembly" % "0.12.0")), und dann habe ich es laufen lasse, erhalte ich eine Fehlermeldung:

Exception in thread "main" java.lang.ClassNotFoundException: Failed to find data source: parquet. Please find packages at http://spark-packages.org 
    at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.lookupDataSource(ResolvedDataSource.scala:77) 
    at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:219) 
    at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:148) 
    at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:139) 
    at org.apache.spark.sql.DataFrameWriter.parquet(DataFrameWriter.scala:334) 
    at InductionService.Application$.main(ParquetTest.scala:65) 

wenn jedoch Ich baue das mit IntelliJ Idea (normales Build, nicht fett JAR Art von Sache als mit sbt Assembly), und debuggen es innerhalb dieser IDE, es funktioniert tatsächlich. Es ist also klar, dass etwas nicht stimmt mit der Art und Weise, wie ich das mit sbt assembly aufbaue, aber ich weiß nicht, wie ich es beheben soll. Irgendwelche Ideen?

Ich habe den Verdacht, dass der merge-inf-Verwerfungscode in build.sbt die Ursache sein könnte, aber ich brauche diesen Code sonst kann ich nicht mit sbt-Assembly erstellen. (es beschwert sich über Duplikate ...)

+0

Ich habe das gleiche Problem mit Maven-Montage-Plugin – omrsin

Antwort

1

Ich hatte sae Problem. Dienste Ordner in META-INF hatte einige Probleme bei der Zusammenführung. konnte ich dieses Problem beheben, indem Sie eine Regel auf dem MergeStrategy fügt hinzu:

case n if n.contains("services") => MergeStrategy.concat 

Dies ist, was ich habe, und jetzt funktioniert es:

assemblyMergeStrategy in assembly := { 
    case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first 
    case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first 
    case n if n.contains("services") => MergeStrategy.concat 
    case n if n.startsWith("reference.conf") => MergeStrategy.concat 
    case n if n.endsWith(".conf") => MergeStrategy.concat 
    case meta(_) => MergeStrategy.discard 
    case x => MergeStrategy.first 
}