python - 无法使用 Jupyter 笔记本上的 pyspark 从 Apache Spark 连接到 MS SQL
问题描述
我正在尝试使用 Jupyter Notebook 中的 pyspark 从 MS SQL 服务器加载数据。Spark 已经过测试并且工作正常。我正在使用以下内容:
from pyspark import SparkContext, SparkConf, SQLContext
appName = "PySpark SQL Server Example - via JDBC"
master = "local"
conf = SparkConf() \
.setAppName(appName) \
.setMaster(master) \
.set("spark.driver.extraClassPath","mssql-jdbc-7.4.1.jre8.jar")
sc = SparkContext.getOrCreate(conf=conf)
sqlContext = SQLContext(sc)
spark = sqlContext.sparkSession
# Loading data from a JDBC source
jdbcDF = spark.read \
.format("jdbc") \
.option("url", "jdbc:postgresql:dbserver") \
.option("url", "jdbc:sqlserver://188.188.188.188:10004;databaseName=dbnme") \
.option("dbtable", "dbo.tablename") \
.option("user", "usernmame") \
.option("password", "pawwrod") \
.load()
我的 MS SQL 驱动程序 ( mssql-jdbc-7.4.1.jre8.jar
) jar 与我的 python 脚本所在的位置相同。
我得到的错误:
和:
解决方案
我使用 Apache Spark 2.4.4 和 Hadoop 2.7 及更高版本。这是最后对我有用的代码:
from pyspark import SparkContext, SparkConf, SQLContext
appName = "PySpark SQL Server Example - via JDBC"
master = "local"
conf = SparkConf() \
.setAppName(appName) \
.setMaster(master) \
.set("spark.driver.extraClassPath","mssql-jdbc-7.4.1.jre8.jar")
sc = SparkContext.getOrCreate(conf=conf)
sqlContext = SQLContext(sc)
spark = sqlContext.sparkSession
hostname = "localhost"
database = "HumanResources"
port = "1433"
table = "dbo.Employee"
user = "sa"
password = "Dedo9090"
jdbcDF = spark.read.format("jdbc") \
.option("url", f"jdbc:sqlserver://ILI-LAB-HRVOJE;databaseName={database}") \
.option("dbtable", table) \
.option("user", user) \
.option("password", password) \
.load()
jdbcDF.head(50)
如果您在访问 SQL 服务器时仍然遇到问题,请参阅此处建议的启用 TCP/IP,并确保您的防火墙没有阻止访问 MS SQL 服务器正在侦听的 1433 端口。最后,密码中不支持的字符无关紧要。
推荐阅读
- node.js - Nodejs - 如何设置 cron 作业在每 2 个星期日运行
- python - 如何同时标记直方图和函数?
- python - 不确定创建具有时间限制的计划生成器背后的逻辑
- c++ - 这个用于指针的 C++ OOP 概念是什么?
- r - 当我们使用多个 geom_bar 时如何添加多个图例?
- spring-boot - 为什么 SpringBoot 应用程序的堆内存使用量不断增加?
- javascript - 为什么 Vue.js 中从挂载钩子发送的 AJAX GET 请求总是忽略浏览器缓存?
- powershell - URL 健康检查 PowerShell 脚本在大多数站点上正确获取 HTTP 200,但在某些站点上不正确的“0”状态代码...API 超时问题?
- c++ - 这个警告“指向算术中使用的函数的指针”是什么意思?
- arrays - 为什么链表叫链表 为什么不链表?