2016-11-15 5 views
1

Я потратил весь день, пытаясь решить проблему, описанную ниже. Я был бы очень признателен за loooot, если бы кто-то мог указать мне мою ошибку.java.lang.NoSuchMethodError: org.apache.spark.sql.DataFrameReader.parquet

Когда я пакет мой Спарк проект Java и запустить его с искровым представить, ошибка происходит в этой строке кода:

DataFrame parquetFile = sqlContext.read().parquet("s3n://" + 
                 aws_bucket_data + "/" + 
                 aws_path); 

Когда я запущенной ту же программу в Intellij, она работала отлично (есть нет проблем с соединением с S3, и проблема связана с DataFrame). Я использовал Intellij для упаковки проекта. Я знаю, что DataFrame был заменен DataSet в Spark 2.0.0, но я использую Spark 1.6.2 !!!

16/11/15 19:51:17 INFO SharedState: Warehouse path is 'file:/usr/local/spark-1.6.2-bin-hadoop2.6/spark-warehouse'. 
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.DataFrameReader.parquet([Ljava/lang/String;)Lorg/apache/spark/sql/DataFrame; 
    at org.test.Manager.run(Manager.java:55) 
    at org.test.Runner.main(Runner.java:24) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:729) 
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

Это мой файл pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.test</groupId> 
    <artifactId>runner</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 

     <java.version>1.8</java.version> 
     <spark.version>1.6.2</spark.version> 
     <jackson.version>2.8.3</jackson.version> 

    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.spark</groupId> 
      <artifactId>spark-sql_2.10</artifactId> 
      <version>${spark.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.module</groupId> 
      <artifactId>jackson-module-scala_2.10</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.sedis</groupId> 
      <artifactId>sedis_2.10</artifactId> 
      <version>1.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.lambdaworks</groupId> 
      <artifactId>jacks_2.10</artifactId> 
      <version>2.3.3</version> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe</groupId> 
      <artifactId>config</artifactId> 
      <version>1.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-aws</artifactId> 
      <version>2.6.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk-s3</artifactId> 
      <version>1.11.53</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
      </plugin> 

      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>build-a</id> 
         <configuration> 
          <archive> 
           <manifest> 
            <mainClass>org.test.Runner</mainClass> 
           </manifest> 
          </archive> 
          <descriptorRefs> 
           <descriptorRef>jar-with-dependencies</descriptorRef> 
          </descriptorRefs> 
          <finalName>runner</finalName> 
         </configuration> 
         <phase>package</phase> 
         <goals> 
          <goal>assembly</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

UPDATE:

Я пытался компилировать с mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package -Xlint:deprecation, и это детальный StackTrace:

[ERROR] No plugin found for prefix 'lint' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/home/meeee/.m2/repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1] 
org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException: No plugin found for prefix 'lint' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/home/meeee/.m2/repository), central (https://repo.maven.apache.org/maven2)] 

ответ

0

Spark SQL 1.6.2 не включает недостающий метод (parquet(String path))

parquet for 2.0.1

public Dataset<Row> parquet(String path) 

Since: 2.0.0

Используйте версию 2.0.0 или выше

+0

Спасибо за ваш ответ. Я нашел здесь (https://spark.apache.org/docs/2.0.1/api/java/org/apache/spark/sql/DataFrameReader.html#parquet(java.lang.String)), что 'public Dataset паркет (scala.collection.Seq пути) 'поддерживается с 1,4,0. Я не понимаю, почему тогда я могу выполнить его из Intellij и почему бы мне не получить ошибки компиляции? Не могли бы вы рассказать о своем ответе на эти сомнения? Благодарю. – duckertito

+0

Когда я изменяю 'spark.version' до 2.0.0 в моем POM-файле, он просит меня изменить DataFrame на Dataset. Я сделал это и снова упаковал код. Когда я его выполняю, он дает мне эту ошибку: '[ERROR] /usr/test/Manager.java:[66,58] несовместимые типы: java.lang.Object не может быть преобразован в org.apache.spark.sql.Row [] 'относительно этой строки кода' Dataset eventsRaw = sqlContext.sql ("SELECT * FROM mydata"); Строка [] rddRows = eventsRaw.collect(); '. На самом деле не понимаю, что там происходит .... – duckertito

+0

См. Мое обновление. Возможно, это поможет нам решить эту проблему. Спасибо. – duckertito

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