我想在jupyter笔记本中使用pyspark查询PostgreSQL。我浏览了关于StackOverflow的很多问题,但是它们对我都不起作用,主要是因为答案似乎过时了。这是我的最小代码:
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
url = 'jdbc:postgresql://host/dbname'
properties = {'user': 'username', 'password': 'pwd'}
df = spark.read.jdbc(url=url, table='tablename', properties=properties)
从笔记本运行此命令将引发以下错误:
Py4JJavaError: An error occurred while calling o69.jdbc.
: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:315)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:85)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:85)
at scala.Option.getOrElse(Option.scala:121)...
我发现的主要技巧在下面的链接中进行了总结,但是很遗憾,我无法在笔记本中使用这些技巧:
Pyspark连接到ipython Notebook中的Postgres数据库
注意:我正在使用Spark 2.3.1和Python 3.6.3,并且如果指定jar位置,则可以从pyspark shell连接到数据库。
pyspark --driver-class-path /home/.../postgresql.jar --jars /home/.../jars/postgresql.jar
感谢任何可以在这一方面帮助我的人。
编辑
我共享的链接中已经列出了如何在IPython Notebook中加载jar依赖项的答案,这些答案对我不起作用。我已经尝试从笔记本配置环境变量:
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--driver-class-path /path/to/postgresql.jar --jars /path/to/postgresql.jar'
文件路径或文件本身没有任何问题,因为当我指定它并运行pyspark-shell时,它可以正常工作。
使用config
对我有用的方法:
from pyspark.sql import SparkSession
spark = SparkSession.builder.config('spark.driver.extraClassPath', '/path/to/postgresql.jar').getOrCreate()
url = 'jdbc:postgresql://host/dbname'
properties = {'user': 'username', 'password': 'pwd'}
df = spark.read.jdbc(url=url, table='tablename', properties=properties)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句