dependencies {
compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.1'
compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.1.0'
compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.1.0'
compile group: 'org.elasticsearch', name: 'elasticsearch-spark-20_2.11', version: '5.1.2'
这是我的gradle配置的一部分。它找到了。 当我添加如下所示的'play-json'库来处理json字符串时。
compile group: 'com.typesafe.play', name: 'play-json_2.11', version: '2.5.13'
错误出现在scala尝试读取csv文件的地方。
引起:com.fasterxml.jackson.databind.JsonMappingException: 不相容的杰克逊版本:2.7.8 at com.fasterxml.jackson.module.scala.JacksonModule $ class.setupModule(JacksonModule.scala:64) 在 com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
spark.read
.option("header", fileHeader)
.option("charset", charset)
.csv( "./data/" + filePath) // error here
我正在使用scala 2.11和spark 2.1.0。 有什么想法吗?
答案 0 :(得分:2)
问题在于Spark依赖于旧版本的Jackson和Jackson Scala module。我想这个模块并没有与最新版本的Jackson一起发挥作为compile('org.apache.spark:spark-core_2.11:2.1.0') {
exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
exclude group: 'com.fasterxml.jackson.module', module: 'jackson-module-scala_2.11'
}
的依赖关系。
尝试将杰克逊作为传递依赖项排除在Spark之外:
cos(pi * i/2) => cos(pi* 0/2) => cos(0) => 1
if(a = cos(pi * i/2)) => if(a = 1) => if(1)
您也可以尝试添加对Jackson 2.7.8的直接依赖。
答案 1 :(得分:2)
Play 2.4.10适用于Spark 2.1,因为他们使用的杰克逊是相似的
dependencies {
compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.1'
compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.1.0'
compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.1.0'
compile group: 'org.elasticsearch', name: 'elasticsearch-spark-20_2.11', version: '5.1.2'
compile group: 'com.typesafe.play', name: 'play-json_2.11', version: '2.4.10'
答案 2 :(得分:0)
如果您使用的是最新的Spark版本3.0.0-preview2
,则以下配置是有效的build.sbt
:
name := "coursera"
version := "0.1"
scalaVersion := "2.12.10"
val sparkVersion = "3.0.0-preview2"
val playVersion="2.8.1"
val jacksonVersion="2.10.1"
//override if you wish to
//dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % jacksonVersion
//dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-streaming" % sparkVersion,
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"com.typesafe.play" %% "play-json" % playVersion
)