Pyspark Equivalent of Pyodbc?



i当前有以下python代码,可以在从本地SQL Server db的表中读取到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修复了这些错误。任何帮助将不胜感激!

您非常接近。ClassNotFoundException表示无法找到驱动程序罐。

为了将驱动程序用于mysql,sql Server等JARS的位置与--jars标志这样的位置:

spark-submit --jars /path/to/sqljdbc42.jar ...other params... yourscript.py

或:

# create a configuration instance and set the spark.jars option
conf = SparkConf()
conf.set('spark.jars', '/path/to/sqljdbc42.jar')
# give that configuration to the spark session
spark = SparkSession.builder
                    .config(conf=conf) 
                    .appName(app_name) 
                    .getOrCreate()

此外,您应该直接使用Spark Session直接从SQL Server读取SQLContext(甚至认为取决于您的Spark版本):

df = spark.read.format('jdbc').options(url=url, dbtable=table).load()

(驱动程序罐)

(注意:还有一种处理环境变量的方法,但我没有使用过)

希望这会有所帮助,祝你好运!

相关内容

  • 没有找到相关文章

最新更新