java.lang.ClassNotFoundException: org.json4s.JsonAST$JValue

Posted

技术标签:

【中文标题】java.lang.ClassNotFoundException: org.json4s.JsonAST$JValue【英文标题】: 【发布时间】:2021-12-23 00:41:46 【问题描述】:

我正在 kafka 上尝试 POC,我正在将数据集加载到主题并从中读取。我正在尝试创建一个结构如下,以应用于我将从 kafka 主题中读取的数据:

import org.apache.spark.sql.DataFrame 
import org.apache.spark.sql.types.MapType, StringType, StructField, StructType 
import org.apache.spark.sql.functions._ 
//import org.apache.spark.sql.types.DataType.j 
//import org.json4s._ 
//import org.json4s.na

val df = spark
    .read
    .format("kafka")
    .options(Admin.commonOptions)
    .option("subscribe", topic)
    .load()
  df.printSchema()

  val personStringDF = df.selectExpr("CAST(value AS STRING)")
  println("personStringDF--")
  personStringDF.show()
  personStringDF.printSchema()

  val schemaTopic: StructType = StructType(
    Array(
      StructField(name = "col1", dataType = StringType, nullable = false),
      StructField(name = "col2", dataType = StringType, nullable = false)
   ))

我的构建文件:


java_library(
    name = "spark",
    exports = [
        "@maven//:org_apache_spark_spark_core_2_12",
        "@maven//:org_apache_spark_spark_sql_2_12",
        "@maven//:org_apache_spark_spark_unsafe_2_12",
        "@maven//:org_apache_spark_spark_tags_2_12",
        "@maven//:org_apache_spark_spark_catalyst_2_12",
        "@maven//:com_fasterxml_jackson_core_jackson_annotations",
        "@maven//:com_fasterxml_jackson_core_jackson_core",
        "@maven//:com_fasterxml_jackson_core_jackson_databind",
        "@maven//:com_typesafe_play_play_json_2_12_2_9_1",
        "@maven//:org_json4s_json4s_ast_2_12_4_0_0",
        "@maven//:org_json4s_json4s_jackson_2_12_4_0_0"
,

        ],
)

但得到Exception in thread "main" java.lang.NoClassDefFoundError: org/json4s/JsonAST$JValue 任何人都可以在这里帮忙,不确定我为什么会得到这个? (使用 Bazel 运行此代码我有一个工作区文件以及所有这些依赖项,这是运行时错误,bazel 构建成功)

【问题讨论】:

Bazel 是否默认创建一个胖罐子?此外,您的代码甚至没有使用 json4s。 Admin.commonOptions 是什么? @OneCricketeer Admin.commonOptions 包含引导服务器、连接到 Kafka 主题所需的 kafka 安全协议(主题在事件流中) 我理解那部分,但如果那不是使用json4s,那么你的错误应该不会发生。 Spark不需要json4s,AFAIK。也没有回答我的第一个问题 即使我不确定我是否不创建结构代码也可以正常工作 - @OneCricketeer 您能出示您的进口声明吗? 【参考方案1】:

此问题已通过将 JSON 依赖项的版本降级为 3.6.6 在WORKSPACE文件中

"org.json4s:json4s-ast_2.12:3.6.6",
"org.json4s:json4s-core_2.12:3.6.6",
"org.json4s:json4s-jackson_2.12:3.6.6",
"org.json4s:json4s-scalap_2.12:3.6.6",

【讨论】:

【参考方案2】:

你错过了一些依赖的 json4s 库。

Bazel 需要在构建文件中显式枚举所有需要的依赖项。

【讨论】:

以上是关于java.lang.ClassNotFoundException: org.json4s.JsonAST$JValue的主要内容,如果未能解决你的问题,请参考以下文章