You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行spark.sql删除表时抛出java.lang.NoSuchFieldError: LZ4问题求助

问题描述

执行Spark SQL删除表的代码时抛出NoSuchFieldError: LZ4错误,细节如下:

执行代码

spark.sql("DROP TABLE IF EXISTS " + dbNameString + "." + tableNameString)

报错堆栈

java.lang.NoSuchFieldError: LZ4

    at org.apache.spark.sql.execution.datasources.parquet.ParquetOptions$.<init>(ParquetOptions.scala:97)
    at org.apache.spark.sql.execution.datasources.parquet.ParquetOptions$.<clinit>(ParquetOptions.scala)
    at org.apache.spark.sql.hive.HiveMetastoreCatalog.convert(HiveMetastoreCatalog.scala:136)

环境与依赖

  • Java版本:8
  • Maven依赖配置:
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.12</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-metastore</artifactId>
      <version>2.3.9</version>
      <scope>provided</scope>
</dependency>

已尝试操作

  • 排查到可能是JAR冲突,当前依赖的lz4版本为1.7.1:
<dependency>
        <groupId>org.lz4</groupId>
        <artifactId>lz4-java</artifactId>
        <version>1.7.1</version>
</dependency>
  • 尝试将lz4-java升级至1.8.0,问题仍未解决。

解决方案

这个错误由lz4版本不兼容或依赖冲突导致,Spark 3.4.1对lz4-java有明确版本要求,可按以下步骤解决:

  1. 指定Spark兼容的lz4版本
    Spark 3.4.1官方依赖的lz4-java版本为1.9.4,你当前使用的1.7.1/1.8.0版本过低,导致ParquetOptions类无法找到对应LZ4字段。直接在Maven中声明该版本:
<dependency>
    <groupId>org.lz4</groupId>
    <artifactId>lz4-java</artifactId>
    <version>1.9.4</version>
</dependency>
  1. 锁定版本避免冲突
    通过dependencyManagement强制锁定lz4-java版本,防止其他依赖引入低版本:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.lz4</groupId>
            <artifactId>lz4-java</artifactId>
            <version>1.9.4</version>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 排查并排除冲突依赖
    执行Maven命令查看依赖树,确认是否有其他依赖引入了冲突的lz4版本:
mvn dependency:tree | grep lz4

若发现冲突,在对应依赖中添加排除配置,例如:

<dependency>
    <!-- 冲突的依赖坐标 -->
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>xxx</version>
    <exclusions>
        <exclusion>
            <groupId>org.lz4</groupId>
            <artifactId>lz4-java</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  1. 清理缓存重新构建
    执行以下命令删除旧依赖缓存,重新构建项目:
mvn clean install -U

内容的提问来源于stack exchange,提问作者ujjawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:00:04