2016-09-04 4 views
2

this posting의 지침에 따라 SQLalchemy에 Objects 클래스로 정의되고 생성 된 "objects"라는 테이블이있는 기존 Postgres 데이터베이스의 데이터를 읽었습니다. 이 테이블을 확인할 수 같은 보이는JDBC를 사용하여 Postgres 데이터베이스에 연결하는 방법

Py4JJavaError: An error occurred while calling o25.jdbc. 
: java.lang.NullPointerException 
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:158) 
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:117) 
    at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:237) 
    at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:159) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237) 
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 
    at py4j.Gateway.invoke(Gateway.java:280) 
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128) 
    at py4j.commands.CallCommand.execute(CallCommand.java:79) 
    at py4j.GatewayConnection.run(GatewayConnection.java:211) 
    at java.lang.Thread.run(Thread.java:745) 

: 내 Jupyter 노트북에서, 내 코드는 다음

from pyspark import SparkContext 
from pyspark import SparkConf 
from random import random 

#spark conf 
conf = SparkConf() 
conf.setMaster("local[*]") 
conf.setAppName('pyspark') 

sc = SparkContext(conf=conf) 

from pyspark.sql import SQLContext 
sqlContext = SQLContext(sc) 
properties = { 
    "driver": "org.postgresql.Driver" 
} 
url = 'jdbc:postgresql://PG_USER:[email protected]_SERVER_IP/db_name' 
df = sqlContext.read.jdbc(url=url, table='objects', properties=properties) 

마지막 줄 결과입니다. 내가 데이터베이스에 제대로 연결되어 있는지 확인하려면 여기에서 어떻게 테스트해야합니까?

답변

2

이름 확인과 관련된 문제는 org.postgresql.util.PSQLException으로 표시되며 NPE가 발생하지 않습니다. 문제의 원인은 실제로 연결 문자열이며 특히 사용자 자격 증명을 제공하는 방식입니다. 언뜻 그것은 벌레처럼 보이지만 짧은 솔루션을 찾고 있다면 당신은 URL 속성을 사용할 수 있습니다 :

url = 'jdbc:postgresql://PG_SERVER_IP/db_name?user=PG_USER&password=PASSWORD' 

또는 속성 인수 :에

properties = { 
    "user": "PG_USER", 
    "password": "PASSWORD", 
    "driver": "org.postgresql.Driver" 
} 
+0

스팟 - 감사를! – FullStack

관련 문제