Spark Scala API读取CSV时遇Java与本地库版本不匹配错误求助
解决Spark Scala读取CSV时MapR库版本不匹配问题
问题场景
MacOS环境下,使用Java 8 + Spark Scala API读取CSV文件做数据预处理时,触发MapR客户端初始化失败错误,无法创建FileClient。
错误日志
2024-09-12 11:26:46,0484 ERROR JniCommon fc/jni_MapRClient.cc:795 Thread: 12962582528 Mismatch found for java and native libraries java build version 6.1.0.20180926230239.GA, native build version 6.1.0.20171109191718.GA java patch vserion $Id: mapr-version: 6.1.0.20180926230239.GA 9008f798f53897bea861, native patch version $Id: mapr-version: 6.1.0.20171109191718.GA 2227eb16eb6dc79ffe87 2024-09-12 11:26:46,0484 ERROR JniCommon fc/jni_MapRClient.cc:812 Thread: 12962582528 Client initialization failed. Could not create FileClient java.io.IOException: Could not create FileClient
关联代码
def readDataCSV(): DataFrame = { var filePath = "/user/library/com/src/test/spark-test/param.csv" spark.read.format("com.databricks.spark.csv").option("header", "true").option("delimiter", ",").load(filePath) }
解决方案
1. 统一MapR库版本
错误核心是Java侧MapR依赖库与本地原生库版本不匹配:Java库版本为6.1.0.20180926230239.GA,本地原生库版本为6.1.0.20171109191718.GA。需将两者调整为完全一致的版本:
- 若用Maven/Gradle管理依赖,更新MapR相关依赖的版本号,与本地安装的MapR客户端版本对齐;
- 重新安装对应版本的MapR本地客户端,确保原生库文件版本匹配。
2. 配置原生库路径
在MacOS上,确认MapR原生库(如libMapRClient.dylib)的路径已添加到环境变量DYLD_LIBRARY_PATH中,保证Spark运行时能加载到正确版本的库文件。
3. 改用Spark内置CSV数据源
Spark 2.0及以上版本已内置CSV读取支持,无需依赖第三方com.databricks.spark.csv包。修改代码如下可绕开MapR客户端依赖问题(适用于文件存储在本地文件系统或HDFS的场景):
def readDataCSV(): DataFrame = { val filePath = "/user/library/com/src/test/spark-test/param.csv" spark.read .option("header", "true") .option("delimiter", ",") .csv(filePath) }
内容的提问来源于stack exchange,提问作者Adidev-b
相关产品推荐
相关产品推荐

