2017-02-03 8 views
0

Я получаю NoSuchMethodError при запуске простой программы Spark, пытаясь читать в CSV из HDFS.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

Мне интересно, используете ли вы несовместимые версии. вы можете вставить свою искру submit –

+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

Начиная с искры 2.x, пакет spark-csv уже включен в состав Spark.

Вы просто должны быть в состоянии сделать:

вал ДФ = spark.read.option ("заголовок", "истина") в формате CSV ("file.csv")

Если вы используете. Искра 1.6.x, нет никакого метода нагрузки на SQLContext, вам нужно использовать следующим образом():

вал ДФ = sqlContext.read.format ("com.databricks.spark.csv") ...

Надеюсь, что помогает.