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

执行Spark Scala写入Parquet时遇UnsatisfiedLinkError错误求助

Spark写入Parquet时UnsatisfiedLinkError错误解决方案

错误原因

这个错误是Windows环境下Hadoop本地原生库(如winutils.exe、hadoop.dll)缺失或版本不匹配导致的,org.apache.hadoop.io.nativeio.NativeIO$Windows.access0是依赖本地系统调用的方法,找不到对应实现就会抛出该异常。

解决步骤

1. 匹配Hadoop本地库版本

  • 确认你配置的HADOOP_HOME目录下,bin文件夹中的本地工具(winutils.exe、hadoop.dll等)版本,必须和Maven依赖里的hadoop-client-api版本(3.3.6)完全一致。
  • 如果版本不匹配,下载对应3.3.6版本的Hadoop Windows适配包,替换HADOOP_HOME\bin下的所有文件。

2. 补充Hadoop运行时依赖

你的Maven配置只引入了Hadoop客户端API,缺少运行时实现,添加以下依赖:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client-runtime</artifactId>
    <version>3.3.6</version>
</dependency>

3. 临时禁用本地库(应急方案)

如果暂时无法获取匹配的本地库,可以在Spark初始化时强制禁用本地原生库:

import org.apache.spark.sql.SparkSession

object ParquetWriter {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("ParquetWriteDemo")
      .master("local[*]")
      .config("hadoop.native.lib", "false") // 关闭本地库依赖
      .getOrCreate()

    // 示例:读取数据并写入Parquet
    val sampleDF = spark.createDataFrame(Seq((1, "test"), (2, "demo"))).toDF("id", "value")
    sampleDF.write.mode("overwrite").parquet("./output.parquet")

    spark.stop()
  }
}

4. 校验环境变量配置

  • 检查HADOOP_HOME环境变量是否指向正确的Hadoop安装目录,确保没有拼写错误。
  • 将%HADOOP_HOME%\bin添加到系统PATH环境变量中,之后重启IDE或命令行窗口,让配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:50:10