2017-02-03 19 views
0

运行简单的Spark程序时,尝试从HDFS读取CSV时,出现NoSuchMethodError。Spark SQL:NoSuchMethodError:SQLContext.load

错误:

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包,但运行时失败并打印出该错误。

在此先感谢。

+0

我在想你是否使用不兼容的版本。你可以粘贴你的火花在这里提交 –

+0

@RamGhadiyaram我只是在做'spark-submit --master = local [*] file.jar'。 – cogm

+0

似乎我实际上使用Scala 2.11,而我的整个sbt文件是垃圾。我更新它使用2.11版本的一切,但现在我得到这个错误与spark-csv: '线程中的异常“main”java.lang.ClassNotFoundException:无法找到数据源:com.databricks.spark-csv。请在http:// spark.apache.org/third-party-projects.html'找到软件包 – cogm

回答

0

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

你应该只能够做到:

VAL DF = spark.read.option( “头”, “真”)CSV( “FILE.CSV”)

如果您正在使用。星火1.6.x版,对SQLContext空载方法,你需要使用read():

VAL DF = sqlContext.read.format( “com.databricks.spark.csv”)...

希望有所帮助。