Spark SQL:NoSuchMethodError:SQLContext.load

时间:2017-02-03 16:56:01

标签: hadoop apache-spark apache-spark-sql

我在运行一个简单的Spark程序时遇到NoSuchMethodError,试图从HDFS读取CSV。

错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.SQLContext.load(Ljava/lang/String;Lscala/collection/immutable/Map;)Lorg/apache/spark/sql/DataFrame;

代码:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

import org.apache.spark.sql.SQLContext

object Averager{
        def main (args: Array[String]) {
                val conf = new SparkConf().setAppName("Averager")
                val sc = new SparkContext(conf)

                val sqlContext = new SQLContext(sc)

                val df = sqlContext.load("com.databricks.spark-csv", Map("path" -> "hdfs://hadoop:9000/file.csv", "header" -> "true"))

                df.printSchema()
        }
}

我的project.sbt文件:

name := "Averager"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0"
libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.6.0"
libraryDependencies += "com.databricks" % "spark-csv_2.10" % "1.5.0"

它可以使用sbt包编译好,但是在运行时它会失败并打印出该错误。

提前致谢。

1 个答案:

答案 0 :(得分:0)

从Spark 2.x开始,spark-csv软件包已包含在Spark中。

你应该能够做到:

val df = spark.read.option(" header"," true")。csv(" file.csv")

如果您使用的是Spark 1.6.x,SQLContext上没有加载方法,则需要使用read():

val df = sqlContext.read.format(" com.databricks.spark.csv")...

希望有所帮助。