Spark Cassandra 连接器找不到 java.time.LocalDate

Posted

技术标签:

【中文标题】Spark Cassandra 连接器找不到 java.time.LocalDate【英文标题】:Spark Cassandra Connector cannot find java.time.LocalDate 【发布时间】:2017-11-21 00:06:01 【问题描述】:

我正在尝试使用带有 Datastax Spark-Cassandra 连接器的 Spark 查询 Cassandra。 Spark 代码是

  val conf = new SparkConf(true)
    .setMaster("local[4]")
    .setAppName("cassandra_query")
    .set("spark.cassandra.connection.host", "mycassandrahost")

  val sc = new SparkContext(conf)

  val rdd = sc.cassandraTable("mykeyspace", "mytable").limit(10) 

  rdd.foreach(println)
  sc.stop() 

所以它现在只是在本地运行。我的 build.sbt 文件看起来像

scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "2.0.0",
  "org.apache.spark" %% "spark-sql" % "2.0.0",
  "cc.mallet" % "mallet" % "2.0.7",
  "com.amazonaws" % "aws-java-sdk" % "1.11.229",
  "com.datastax.spark" % "spark-cassandra-connector_2.11" % "2.0.0"
)

我使用程序集插件创建了一个胖 jar,当我提交 spark 作业时出现以下错误

 Lost task 6.0 in stage 0.0 (TID 6) on executor localhost: java.io.IOException (Exception during preparation of SELECT "pcid", "content" FROM "mykeyspace"."mytable" WHERE token("pcid") > ? AND token("pcid") <= ?  LIMIT 10 ALLOW FILTERING: class java.time.LocalDate in JavaMirror with org.apache.spark.util.MutableURLClassLoader@923288b of type class org.apache.spark.util.MutableURLClassLoader with classpath [file:/root/GenderPrediction-assembly-0.1.jar] and parent being sun.misc.Launcher$AppClassLoader@1e69dff6 of type class sun.misc.Launcher$AppClassLoader with classpath [file:/root/spark/conf/,file:/root/spark/jars/datanucleus-core-3.2.10.jar,...not found.

(注意:上面的类路径中列出的 jar 太多,所以我将它们替换为“...”)

所以它似乎找不到 java.time.LocalDate - 我该如何解决这个问题?

我发现了另一个看起来相似的帖子spark job cassandra error 但是它是一个不同的类,无法找到,所以我不确定它是否有帮助。

【问题讨论】:

【参考方案1】:

java.time.LocalDate 是 Java8 的一部分,您运行的 Java 版本似乎低于 8。

spark-cassandra-connector 2.0 需要 java 8。 Spark Cassandra version compatibility

【讨论】:

【参考方案2】:

你可以试试这个

    libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "2.0.0",
    "org.apache.spark" %% "spark-sql" % "2.0.0",
    "cc.mallet" % "mallet" % "2.0.7",
    "com.amazonaws" % "aws-java-sdk" % "1.11.229",
    "com.datastax.spark" % "spark-cassandra-connector_2.11" % "2.0.0" exclude("joda-time", "joda-time"),
    "joda-time" % "joda-time" % "2.3"

)

【讨论】:

以上是关于Spark Cassandra 连接器找不到 java.time.LocalDate的主要内容,如果未能解决你的问题,请参考以下文章

找不到 ODBC 驱动程序管理器 .. 用 Ja​​va 连接 MSAccess?

通过 Spark SQL 查询 Cassandra UDT

无法使用 Spark cassandra 连接器 1.5.0 连接 Cassandra 3.0

Spark cassandra 连接器 + 加入超时

如何用Cassandra连接火花

Spark Cassandra 连接器 - perPartitionLimit