elasticsearch,apache-spark,build,Exception,elasticsearch,Apache Spark,Build" /> elasticsearch,apache-spark,build,Exception,elasticsearch,Apache Spark,Build" />

Exception NoSuchMethodError:org.apache.spark.sql.SQLContext.sql

Exception NoSuchMethodError:org.apache.spark.sql.SQLContext.sql,exception,elasticsearch,apache-spark,build,Exception,elasticsearch,Apache Spark,Build,我用弹性搜索库编写了一个Spark程序 这是我的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.ap

我用弹性搜索库编写了一个Spark程序

这是我的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 !!!
val-sqlContext=new-sqlContext(sparkContext)

val dataframe=sqlContext.sql(sqlString)/您尝试使用的Elasticsearch Spark连接器版本不支持Spark 2。这里有两个选项:

  • 使用Spark 1.6.x,因为Elasticsearch 2.x不支持Spark 2
  • 将Elasticsearch火花连接器和Elasticsearch自身升级至5.x
例如,我使用org.elasticsearch:elasticsearch-spark-20_2.11:5.0和以下spark 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()

非常感谢。安东·奥克林奇!我将使用spark 1.6.x。那么我应该使用哪个版本的elastic search库呢?@minsu前一段时间我使用了Scala 2.10.6、Spark 1.6.3和
org.elasticsearch:elasticsearch-Spark_2.10:2.4
我用2.3.3安装了elasticsearch,使用库5.0可以吗?如果你使用的是elasticsearch 2.3.3,那么唯一的选择就是使用Spark 1.6.x。您的工件将是
org.elasticsearch:elasticsearch-spark_2.10:2.3.3
(您尝试使用的),但是spark版本,例如,1.6.3.噢,我现在明白了。非常感谢。