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的主要内容,如果未能解决你的问题,请参考以下文章