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

PySpark连接SQL Server LocalDB实例失败求助

PySpark连接SQL Server 2019 LocalDB实例失败排查

问题背景

已通过PYODBC成功连接SQL Server 2019 LocalDB实例(服务器名称:ProjectLocalDB),PYODBC代码如下:

import pyodbc

server = "(LocalDB)\\ProjectLocalDB"
database = "my_db"
trusted_connection = "yes"

conn = pyodbc.connect(
    f"Driver={{ODBC Driver 17 for SQL Server}};"
    f"Server={server};"
    f"Database={database};"
    f"Trusted_Connection={trusted_connection};"
)

cursor = conn.cursor()
cursor.execute("SELECT @@version")
row = cursor.fetchone()
while row:
    print(row[0])
    row = cursor.fetchone()

conn.close()

但相同实例使用PySpark JDBC连接时报错,PySpark代码如下:

from pyspark.sql import SparkSession

server_name = "(LocalDB)\\ProjectLocalDB"
dbname = "my_db"
table_name = "dbo.polls_choice"

jdbc_driver_path = "E:\Program Files\SSMS\sqljdbc_12.6\enu\jars\mssql-jdbc-12.6.1.jre8.jar"

jdbc_url = f"jdbc:sqlserver://{server_name};databaseName={dbname};integratedSecurity=true;loginTimeout=60;"

employees_df = spark.read \
    .format("jdbc") \
    .option("url", jdbc_url) \
    .option("dbtable", table_name) \
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
    .load()

错误信息

Py4JJavaError: An error occurred while calling o72.load.
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host ProjectLocalDB, port 1433 has failed.
Error: "ProjectLocalDB. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.

已尝试操作

  • 启用SQL Server TCP/IP协议
  • 关闭防火墙(已配置允许SQL Server运行)

解决建议

1. 明确LocalDB连接机制差异

LocalDB默认通过命名管道而非TCP/IP提供服务,ODBC驱动会自动解析LocalDB实例名并映射到对应管道,但JDBC驱动不支持直接解析(LocalDB)\\实例名格式,需显式指定命名管道路径。

2. 获取LocalDB实例的命名管道路径

打开命令提示符,执行命令获取实例信息:

sqllocaldb info ProjectLocalDB

在输出中找到Named pipe字段,示例值为:np:\\.\pipe\LOCALDB#ABC123\tsql\query(ABC123为随机生成的实例标识)。

3. 修改JDBC URL使用命名管道

将命名管道路径转义后填入JDBC URL,注意路径中的\需替换为\\:

# 替换为实际获取的命名管道路径
named_pipe = "np:\\\\.\\pipe\\LOCALDB#ABC123\\tsql\\query"
jdbc_url = f"jdbc:sqlserver://{named_pipe};databaseName={dbname};integratedSecurity=true;loginTimeout=60;"

4. 确保Spark正确加载JDBC驱动

除代码中指定driver参数外,需确保Spark进程能访问JDBC驱动包:

  • 方式一:启动Spark时通过--jars参数加载驱动:
    spark-submit --jars "E:\Program Files\SSMS\sqljdbc_12.6\enu\jars\mssql-jdbc-12.6.1.jre8.jar" your_spark_script.py
    
  • 方式二:在SparkSession初始化时配置驱动路径:
    spark = SparkSession.builder \
        .appName("LocalDBConnection") \
        .config("spark.driver.extraClassPath", "E:\Program Files\SSMS\sqljdbc_12.6\enu\jars\mssql-jdbc-12.6.1.jre8.jar") \
        .getOrCreate()
    

5. 验证LocalDB实例运行状态

执行命令确保目标实例处于运行状态:

sqllocaldb start ProjectLocalDB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:45:26