无法在 jupyter notebook 中使用 pyspark 读取 MS SQL 表?

Posted

技术标签:

【中文标题】无法在 jupyter notebook 中使用 pyspark 读取 MS SQL 表?【英文标题】:Unable to read MS SQL table using pyspark in jupyter notebook? 【发布时间】:2019-06-26 12:16:32 【问题描述】:
import os
import sys

spark_path = 'C:/opt/spark/spark-2.4.1-bin-hadoop2.7'

os.environ['SPARK_HOME'] = spark_path
os.environ['HADOOP_HOME'] = spark_path

sys.path.append(spark_path + "/bin")
sys.path.append(spark_path + "/python")
sys.path.append(spark_path + "/python/pyspark/")
sys.path.append(spark_path + "/python/lib")
sys.path.append(spark_path + "/python/lib/pyspark.zip")
sys.path.append(spark_path + "/python/lib/py4j-0.9-src.zip")

from pyspark.sql import SparkSession
spark = SparkSession\
    .builder\
    .master('local[*]')\
    .appName('Connection-Test')\
    .config('spark.driver.extraClassPath', 'C:/Users/sqljdbc_4.2.8112.200_enu/sqljdbc_4.2/enu/jre8/sqljdbc42.jar')\
    .config('spark.executor.extraClassPath', 'C:/Users/sqljdbc_4.2.8112.200_enu/sqljdbc_4.2/enu/jre8/sqljdbc42.jar')\
    .getOrCreate()


sqlsUrl = 'jdbc:sqlserver://ip:port;database=dbname'

qryStr = """ (
    SELECT *
    FROM Table
    )  """

spark.read.format('jdbc')\
    .option('url',sqlsUrl)\
    .option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver')\
    .option('dbtable', qryStr )\
    .option("user", "user") \
    .option("password", "password") \
    .load().show()

调用 o50.load 时出错。 :com.microsoft.sqlserver.jdbc.SQLServerException:关键字“WHERE”附近的语法不正确。在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217)

【问题讨论】:

【参考方案1】:

尝试在查询末尾添加“as Table_Name”

qryStr = """ (
    SELECT *
    FROM Table
    ) as Table """

【讨论】:

以上是关于无法在 jupyter notebook 中使用 pyspark 读取 MS SQL 表?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 jupyter notebook 中导入 sparkdl

无法在 jupyter notebook 中使用“cv2.imshow('Lena', img)”

无法在 Jupyter Notebook 中启动张量板

Jupyter Notebook 无法在 Ubuntu WSL2 中打开

无法退出正在运行的 jupyter notebook 服务器

Apache Spark:无法在 Jupyter Notebook 上使用 Matplotlib