执行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
相关产品推荐
相关产品推荐

