2016-06-03 4 views
0

У меня есть следующий код:Не удалось найти источник данных: паркет, при сборке узла SBT

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) 

со следующим 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 
} 
} 

Когда я строю это с sbt- сборка (у меня есть addSbtPlugin ("com.eed3si9n" % "SBT-сборка" % "0.12.0")), а потом запустить его, я получаю сообщение об ошибке:

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) 

Однако, если Я создаю это с помощью IntelliJ Idea (нормальная сборка, а не толстая JAR-вещь, как с сборкой sbt), и отлаживаю ее в этой среде IDE, она действительно работает. Так ясно, что что-то не так с тем, как я это создаю, используя сборку sbt, но я не знаю, как это исправить. Есть идеи?

У меня есть подозрения, что код сбрасывания-сбрасывания в build.sbt может быть причиной, но мне нужен этот код, иначе я не могу построить с помощью sbt-assembly. (он жалуется на дубликаты ...)

+0

У меня та же проблема с Maven-сборки-плагин – omrsin

ответ

1

У меня была проблема sae. службы папка в META-INF имела некоторые проблемы с слиянием. я мог бы исправить это путем добавления правила на MergeStrategy:

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

Это то, что у меня есть, и теперь он работает:

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 
} 
Смежные вопросы