2016-12-13 3 views
1

Я пишу программу Spark с эластичными библиотеками поиска.NoSuchMethodError: org.apache.spark.sql.SQLContext.sql

Вот мой build.sbt.

scalaVersion := "2.10.5" 
val sparkVersion = "2.0.1" 

libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion % "provided", 
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided", 
"org.apache.spark" %% "spark-catalyst" % sparkVersion % "provided", 
"org.apache.spark" %% "spark-hive" % sparkVersion % "provided" 
) 

libraryDependencies += "org.elasticsearch" % "elasticsearch-spark_2.10" % "2.3.3" 
libraryDependencies += "org.elasticsearch" % "elasticsearch" % "2.3.3" 

Это сообщение об ошибке.

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.SQLContext.sql(Ljava/lang/String;)Lorg/apache/spark/sql/Dataset; 
at com.minsu.house.BatchProgram.process(BatchProgram.scala:67) 
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:497) 
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:674) 
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180) 
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205) 
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:120) 
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

И мой код выглядит следующим образом ...

val sqlContext = new SQLContext(sparkContext) 
val dataframe = sqlContext.sql(sqlString)  // <----- HERE !!! 

Я не думаю, что это не имеет ничего общего с библиотекой эластичной поиски.

Возможно, это связано с проблемами зависимости или версий.

Что мне делать? Помогите мне .. Спасибо.

ответ

1

версия разъем Спарк Elasticsearch, что вы пытаетесь использовать не поддерживает искру 2. У вас есть два варианта здесь:

  • Используйте Спарк 1.6.x поскольку Elasticsearch 2.x не поддерживает искру 2
  • Обновление разъема Elasticsearch искрового и сам Elasticsearch к 5.x

например, я использовал org.elasticsearch: elasticsearch-искровой 20_2.11: 5.0 и следующий Спарк 2 код:

// add to your class imports 
import org.elasticsearch.spark.sql._ 

// Use Spark 2.0 SparkSession object to provide your config 
val sparkSession = SparkSession.builder().config(...).getOrCreate() 
// Optional step, imports things like $"column" 
import sparkSession.implicits._ 
// Specify your index and type in ES 
val df = spark.esDF("index/type") 
// Perform an action 
df.count() 
+0

Спасибо. Антон Окольный! Я буду использовать искру 1.6.x. Какую версию библиотеки для поиска эластичности я должен использовать? – minsu

+0

@minsu sometime ago Я использовал Scala 2.10.6, Spark 1.6.3 и 'org.elasticsearch: elasticsearch-spark_2.10: 2.4' –

+0

И я установил elasticsearch с 2.3.3, нормально ли использовать библиотеку 5.0? – minsu