2016-09-12 98 views
3

と脂肪のjarファイルを作るとき、私はMavenのアセンブリのプラグインと脂肪ジャーを組み立て、以下の問題が発生しています:は、「データ・ソースが見つかりませんでした:寄木細工」のmaven

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.DataSource.lookupDataSource(DataSource.scala:145) 
    at org.apache.spark.sql.execution.datasources.DataSource.providingClass$lzycompute(DataSource.scala:78) 
    at org.apache.spark.sql.execution.datasources.DataSource.providingClass(DataSource.scala:78) 
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:310) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149) 
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:427) 
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:411) 
    at org.apache.spark.mllib.classification.impl.GLMClassificationModel$SaveLoadV1_0$.loadData(GLMClassificationModel.scala:77) 
    at org.apache.spark.mllib.classification.LogisticRegressionModel$.load(LogisticRegression.scala:183) 
    at org.apache.spark.mllib.classification.LogisticRegressionModel.load(LogisticRegression.scala) 
    at my.test.spark.assembling.TopicClassifier.load(TopicClassifier.java:35) 
    at my.test.spark.assembling.Main.main(Main.java:23) 
Caused by: java.lang.ClassNotFoundException: parquet.DefaultSource 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5$$anonfun$apply$1.apply(DataSource.scala:130) 
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5$$anonfun$apply$1.apply(DataSource.scala:130) 
    at scala.util.Try$.apply(Try.scala:192) 
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5.apply(DataSource.scala:130) 
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5.apply(DataSource.scala:130) 
    at scala.util.Try.orElse(Try.scala:84) 
    at org.apache.spark.sql.execution.datasources.DataSource.lookupDataSource(DataSource.scala:130) 
    ... 11 more 

そして、ここではのpom.xmlです。

<groupId>my.test.spark</groupId> 
<artifactId>assembling</artifactId> 
<version>1.0-SNAPSHOT</version> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 


<dependencies> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_2.11</artifactId> 
     <version>2.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-mllib_2.11</artifactId> 
     <version>2.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-sql_2.11</artifactId> 
     <version>2.0.0</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

私はのIntelliJ IDEAでそれを実行した場合、問題は発生しません。

クラスを見つけるには、瓶に他に何を含める必要がありますか?

+0

jarファイル内のクラスですか? –

+0

いいえ、 'parquet.DefaultSource'はありません。 しかし、 'org.apache.spark.sql.execution.datasources.parquet'パッケージの他の多くのクラスがjarファイルにあります。 –

答えて

4

問題の解決方法が見つかりました。私はsbt assemblyでパッケージを構築しようとしましたが、異なるが関連する問題を経験しました。私がここで見つけた解決策:https://stackoverflow.com/a/27532248/5520896も私の元の問題に役立ちます。

だから、問題は日陰のプラグインをMavenとトランス

<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 

を適用するにはMavenのアセンブリのプラグインから動いている解き何だから私の最終のpom.xmlのプラグインの設定は以下の通りです:

どうやら
 <plugin> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.1</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <createDependencyReducedPom>false</createDependencyReducedPom> 

         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
         <transformers>         
          <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Mavenアセンブリで何がうまくいかないのかここで説明します:https://stackoverflow.com/a/21118824/5520896

関連する問題