Azure Synapse中Spark JDBC连接Infor Data Lake的ionapi报错问题
解决Azure Synapse Spark JDBC连接Infor Data Lake的ionapi文件找不到问题
问题核心
错误提示明确指出:Infor Compass JDBC Driver.ionapi文件必须位于驱动JAR所在的目录。当前你将ionapi文件存储在ADLS路径,但Spark加载JDBC驱动时,会将JAR下载到Executor的本地临时目录,而ionapi文件仍留在ADLS,驱动无法跨路径读取ADLS上的配置文件,导致找不到错误。
解决方案
1. 分发ionapi文件到Executor本地
使用Spark的spark.files配置,将ionapi文件分发到每个Executor的工作目录,这样驱动就能在本地找到该文件。
2. 调整代码配置
修改Spark会话初始化和JDBC连接属性:
- 添加
spark.files配置指定ionapi的ADLS路径,Spark会自动将文件同步到Executor本地 - JDBC属性中的
ionapi值改为本地文件名(无需完整路径,因为文件已在Executor工作目录)
修改后的代码示例:
%%configure -f { "conf": { "spark.jars": "abfss://container@datalake_name.dfs.core.windows.net/infor-compass-jdbc-2023.10.jar", "spark.files": "abfss://container@datalake_name.dfs.core.windows.net/path_to_ionapi_file/Infor Compass JDBC Driver.ionapi" } } storage_account_name = "**" container_name = "**" jdbc_jar_path = f"abfss://{container_name}@{storage_account_name}.dfs.core.windows.net/path_to_jdbc_driver/infor-compass-jdbc-2023.10.jar" ionapi_file_name = "Infor Compass JDBC Driver.ionapi" spark = SparkSession.builder \ .appName("InforDataLakeConnection") \ .config("spark.jars", jdbc_jar_path) \ .config("spark.files", f"abfss://{container_name}@{storage_account_name}.dfs.core.windows.net/path_to_ionapi_file/{ionapi_file_name}") \ .getOrCreate() jdbc_url = "jdbc:infordatalake://your_infordatalake_endpoint" jdbc_properties = { "user": "**", "password": "**", "driver": "com.infor.idl.jdbc.Driver", "ionapi": ionapi_file_name } table_name = "table_name" df = spark.read.jdbc(url=jdbc_url, table=table_name, properties=jdbc_properties) df.show()
3. 额外验证步骤
- 确保JDBC驱动JAR和ionapi文件的ADLS路径权限正确,Synapse Spark池拥有读取该路径的权限(可通过MSI或存储密钥配置)
- 检查
spark.files配置的路径是否与ionapi文件实际路径完全一致,注意文件名的大小写(Linux环境下大小写敏感) - 避免重复配置
spark.jars:如果已经在%%configure中指定了驱动路径,SparkSession.builder中可以省略该配置,防止冲突
内容的提问来源于stack exchange,提问作者Sriram M
相关产品推荐
相关产品推荐

