2017-11-28 7 views
2

나는 현재 팬더로 로컬 SQL 서버 DB에서 테이블에 읽을 수있는 다음과 같은 파이썬 코드가 있습니다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은 드라이버 항아리를 찾을 수 없음을 의미합니다.

MySQL, SQL Server 등의 드라이버를 사용하려면 마스터와 슬레이브에서 액세스 할 수있는 폴더에 jar 파일을 두는 것이 중요합니다 (spark를 로컬로 실행 한 다음 확인하는 경우). 항아리의 위치 중 하나를이 같은 --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() 

, 당신은는 SqlContext 직접들에서 읽을하지 스파크 세션을 사용한다 (당신의 스파크 버전에 따라 다릅니다도 생각) QL 서버 :

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

(driver jar )

(참고 :이 환경 변수로 작업하는 방법도하지만 난 그것을 사용하지 않은)

희망, 도움이, 행운을 빕니다!