java.lang.NoSuchMethodError:org.apache.spark.sql.DataFrameReader.parquet

java.lang.NoSuchMethodError:org.apache.spark.sql.DataFrameReader.parquet,java,maven,apache-spark,intellij-idea,Java,Maven,Apache Spark,Intellij Idea,我花了一整天的时间试图解决下面解释的问题。如果有人能指出我的错误,我将非常感激 当我打包Spark Java项目并使用Spark submit运行它时,错误发生在以下代码行: DataFrame parquetFile = sqlContext.read().parquet("s3n://" + aws_bucket_data + "/" +

我花了一整天的时间试图解决下面解释的问题。如果有人能指出我的错误,我将非常感激

当我打包Spark Java项目并使用Spark submit运行它时,错误发生在以下代码行:

    DataFrame parquetFile = sqlContext.read().parquet("s3n://" +
                                                      aws_bucket_data + "/" +
                                                      aws_path);
当我在Intellij中运行同一个程序时,它运行得很好(S3没有连接问题,abd问题是指数据帧)。我用Intellij打包了这个项目。我知道在Spark 2.0.0中DataFrame被DataSet替换,但我使用的是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>
不包括缺少的方法(
拼花地板(字符串路径)

public Dataset<Row> parquet(String path)
公共数据集拼花(字符串路径)
自:2.0.0以来

使用2.0.0或更高版本

不包括缺少的方法(
拼花地板(字符串路径)

public Dataset<Row> parquet(String path)
公共数据集拼花(字符串路径)
自:2.0.0以来


使用2.0.0或更高版本

谢谢您的回复。我在这里()发现,
公共数据集parquet(scala.collection.Seq路径)
从1.4,0开始就受到支持。我不明白为什么我能从Intellij执行它,为什么我不能得到编译错误?你能详细说明一下你对这些疑问的回答吗?谢谢。当我在POM文件中将
spark.version
更改为2.0.0时,它会要求我将DataFrame更改为Dataset。我这样做了,并再次打包了代码。当我执行它时,它会给我以下错误:
[error]/usr/test/Manager.java:[66,58]不兼容的类型:java.lang.Object无法转换为org.apache.spark.sql.Row[]
关于此代码行
数据集eventsRaw=sqlContext.sql(“从mydata中选择*);行[]rddRows=eventsRaw.collect()。真的不明白那里发生了什么…请看我的更新。也许这会帮助我们解决这个问题。谢谢你。@duckertito,但你是在叫拼花(String)。检查此项,如果您仍有问题,请更新问题谢谢您的答复。我在这里()发现,
公共数据集parquet(scala.collection.Seq路径)
从1.4,0开始就受到支持。我不明白为什么我能从Intellij执行它,为什么我不能得到编译错误?你能详细说明一下你对这些疑问的回答吗?谢谢。当我在POM文件中将
spark.version
更改为2.0.0时,它会要求我将DataFrame更改为Dataset。我这样做了,并再次打包了代码。当我执行它时,它会给我以下错误:
[error]/usr/test/Manager.java:[66,58]不兼容的类型:java.lang.Object无法转换为org.apache.spark.sql.Row[]
关于此代码行
数据集eventsRaw=sqlContext.sql(“从mydata中选择*);行[]rddRows=eventsRaw.collect()。真的不明白那里发生了什么…请看我的更新。也许这会帮助我们解决这个问题。谢谢你。@duckertito,但你是在叫拼花(String)。检查此项,如果仍有问题,请更新问题