2017-10-24 6 views
0

나는 이것에 대한 이전 게시물을 읽었지만, 왜 ipgthon 노트북을 Postgres DB에 연결할 수 없는지 정확히 지적 할 수 없다.ipython 노트북에서 Postgres 데이터베이스에 Pyspark 연결

ipython 노트북에서 pyspark를 실행할 수 있으며 SparkContext가 'sc'로로드됩니다. 나는 (this 후 기준) DB에 연결하는 ipython 노트북에서 뭐하는 거지 여기

export SPARK_CLASSPATH=/path/to/downloaded/jar 

것 :

나는 Postgres의 드라이버를 찾기 위해 내 .bash_profile에 다음 사항이

from pyspark.sql import DataFrameReader as dfr 
sqlContext = SQLContext(sc) 

table= 'some query' 
url = 'postgresql://localhost:5432/dbname' 
properties = {'user': 'username', 'password': 'password'} 

df = dfr(sqlContext).jdbc(
url='jdbc:%s' % url, table=table, properties=properties 
) 

오류 :

Py4JJavaError: An error occurred while calling o156.jdbc. 
: java.SQL.SQLException: No suitable driver. 

나는 그것이 오류 w의 이해 내가 다운로드 한 드라이버를 찾았지만 내 .bash_profile 파일에 경로를 추가했을 때 왜이 오류가 발생하는지 이해할 수 없습니다.

또한 pyspark - jars를 통해 드라이버를 설정하려고했지만 "no such file or directory"오류가 발생합니다.

blogpost 또한 포스트 그레스 데이터 소스에 연결하는 방법을 보여줍니다 만, 다음은 나에게 "그런 디렉토리"오류를 제공합니다 :

./bin/spark-shell --packages org.postgresql:postgresql:42.1.4 

추가 정보 : 그들은했습니다

spark version: 2.2.0 
python version: 3.6 
java: 1.8.0_25 
postgres driver: 42.1.4 

답변

1

나는 this 지위의 지시를 따른다.

import os 

os.environ['PYSPARK_SUBMIT_ARGS'] = '--driver-class-path /path/to/postgresql-42.1.4.jar --jars /path/to/postgresql-42.1.4.jar pyspark-shell' 

내가 속성에 '드라이버'설정을 추가 : SparkContext은 이미 내가해야 할 일을했을 모두가 내 .bash_profile에에서 설정 SPARK_CLASSPATH을 제거하고 내 ipython 노트북에서 다음을 사용했다, 나를 위해 사우스 캐롤라이나로 설정 또한 효과가있었습니다. 이 게시물의 다른 부분에서 언급했듯이 SPARK_CLASSPATH가 더 이상 사용되지 않으므로 --driver-class-path를 사용하는 것이 좋습니다.

0

이것이 Apache Spark에서 여러 번 작동하는 방법을 변경했습니다. 내 설정을 보면, 내 .bashrc (Mac에서는 일명 .bash_profile)에 들어 있으므로 시도해 볼 수 있습니다. export SPARK_CLASSPATH=$SPARK_CLASSPATH:/absolute/path/to/your/driver.jar 편집 : Spark 1.6.1을 사용하고 있습니다.

항상 새 셸을 사용하거나 스크립트를 사용하여 업데이트 된 envvar를 확인하십시오 (ipython notebook을 실행하기 전에 쉘에 echo $SPARK_CLASSPATH으로 확인하십시오).

+0

절대 경로 란 무엇입니까? 나는 운전자의 실제 경로를 가지고 그것을 사용했다. 위의 그림과 같은 문제로 바뀌 었습니다. – cocanut

+0

spark classpath가 더 이상 사용되지 않는 것으로 보입니다. https://github.com/elastic/elasticsearch-hadoop/pull/580 – cocanut

+1

연결 했으므로 시간이 지나면 문서화를 위해 솔루션을 업로드하겠습니다. 기본적으로, 나는 spark_classpath가 deprecated 때문에 --driver-class-path를 사용해야한다고 생각한다. – cocanut

관련 문제