2017-03-09 59 views
1

尝试从Postgres数据库读PySpark表。我已经建立了下面的代码和验证SparkContext存在:PySpark sqlContext阅读Postgres 9.6空指针异常

import os 

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


from pyspark import SparkContext, SparkConf 

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

sc = SparkContext(conf=conf) 


from pyspark.sql import SQLContext 

properties = { 
    "driver": "org.postgresql.Driver" 
} 
url = 'jdbc:postgresql://tom:@localhost/gqp' 

sqlContext = SQLContext(sc) 
sqlContext.read \ 
    .format("jdbc") \ 
    .option("url", url) \ 
    .option("driver", properties["driver"]) \ 
    .option("dbtable", "specimen") \ 
    .load() 

我收到以下错误:

Py4JJavaError: An error occurred while calling o812.load. : java.lang.NullPointerException 

我的数据库的名称是gqp,表是specimen,并验证它在运行在localhost使用Postgres.app macOS应用程序。

回答

1

URL是问题所在!

原来是:url = 'jdbc:postgresql://tom:@localhost/gqp'

我删除了tom:@部分,它的工作。该URL必须遵循以下模式:jdbc:postgresql://ip_address:port/db_name,而我的是直接从Flask项目复制的。

如果您正在阅读本文,希望您不会犯同样的错误:)