【发布时间】:2018-05-12 03:30:56
【问题描述】:
我目前有以下 Python 代码可以将本地 SQL Server 数据库中的表读入 Pandas:
import pandas as pd
import pyodbc
# Connect to DB
server = 'server'
db = 'db'
conn = pyodbc.connect('DRIVER={SQL SERVER}; SERVER=' + server + '; DATABASE=' + db + '; TRUSTED_CONNECTION=yes')
cursor = conn.cursor()
table = 'table'
df = pd.read_sql('Select * From ' + table, conn)
该代码有效,但现在我想在 Pyspark 中做同样的事情。 Pyspark 中这段代码的等价物是什么?
我尝试了以下方法:
import findspark
import os
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
# didn't know which of these would work so tried both
os.environ['SPARK_CLASSPATH'] = 'path/to/sqljdbc42.jar'
os.environ['driver-class-path'] = 'path/to/sqljdbc42.jar'
findspark.init('C:/spark/spark')
spark = SparkSession \
.builder \
.appName("SparkCoreTest") \
.getOrCreate()
sc = spark.sparkContext
sqlctx = SQLContext(sc)
server = 'server'
db = 'db'
url = 'jdbc:sqlserver//' + server + ';databaseName=' + db
table = 'table'
properties = {'driver' : 'com.microsoft.sqlserver.jdbc.SQLServerDriver'}
df = sqlctx.read.format('jdbc').options(url=url, dbtable=table, driver='{SQL SERVER}').load()
这给出了java.lang.ClassNotFoundException: {SQL SERVER}。在整个过程中,我还遇到了由于无法找到“合适的驱动程序”而导致的错误,尽管我认为我已经通过更改os.environ 修复了这些错误。任何帮助将不胜感激!
【问题讨论】:
-
您的意思显然是“pyspark 相当于 pyodbc”...
标签: python sql-server apache-spark pyspark pyodbc