2016-09-12 2 views
3

я собираю жира банку с 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' находятся в банке. –

ответ

4

Я нашел решение проблемы. Я попытался построить пакет с sbt assembly и испытал различную, но связанную с этим проблему. Решение, которое я нашел здесь: https://stackoverflow.com/a/27532248/5520896 также помогает с моей оригинальной проблемой.

Так что решает проблему перехода от Maven сборки плагин для Maven плагин тени и применять трансформатор

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

Так что моя окончательная конфигурация 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

Смежные вопросы