Я потратил весь день, пытаясь решить проблему, описанную ниже. Я был бы очень признателен за 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)]
Спасибо за ваш ответ. Я нашел здесь (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
Когда я изменяю '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
См. Мое обновление. Возможно, это поможет нам решить эту проблему. Спасибо. – duckertito