我在运行一个简单的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()
}
}
还有我的项目.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 包编译良好,但在运行时会失败并打印出该错误。
提前谢谢。
从Spark 2.x开始,Spark已经包含了spark-csv包。
你应该能够做到:
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")...
希望有帮助。