2017-11-28 3 views
2

私は現在、パンダにローカルのSQL ServerのDBからテーブルを読み込むために、次のPythonコードを持っている:コードが機能することをPyspark Pyodbcに相当する?

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を変更します。どんな助けでも大歓迎です!

+0

あなたは明らかに "pyodbcのpyspark equivalent"を意味します... – desertnaut

答えて

0

あなたはかなり近いです。 ClassNotFoundExceptionは、ドライバjarが見つからないことを意味します。

MySQL、SQL Serverなどのドライバを使用するには、マスタとスレーブの両方からアクセス可能なフォルダにjarを置くことが重要です(sparkをローカルに実行しても問題ありません)。

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() 

また、あなたはsから読み取るために直接スパークセッションではないSQLContextを使用する必要がありますいずれかのこのような--jarsフラグと瓶の場所(お使いの火花のバージョンによって異なりさえ思った)QLサーバ:

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

driver jar

(注:そこの環境変数で作業する方法もあるが、私はそれを使用していない)

希望、これは幸運に役立ちます!