我正在将数据保存到Postgres数据库,并且作业失败,并显示以下内容:
py4j.protocol.Py4JJavaError:调用时发生错误 o186.jdbc。 :java.lang.ClassNotFoundException:org.postgresql.Driver
在全局安装Spark之前,我将postgres jar下载到spark/jars
文件夹中。
我有意识地搬到了新机器上,而是只通过pip在虚拟环境(venv)中安装了pyspark。
我尝试将extraClassPath配置值设置为虚拟目录中的jar文件夹,但无效:
session = SparkSession \
.builder \
.config("spark.driver.extraClassPath", "/home/me/source/acme/.venv/lib/python3.6/site-packages/pyspark/jars/postgresql-42.2.6.jar") \
.getOrCreate()
尝试了相对和绝对路径以及通配符(*)和完整文件名。似乎没有任何作用。
设置spark.jars.packages
确实可以从Maven正确加载程序包。
.config('spark.jars.packages', 'org.postgresql:postgresql:42.2.6') \
如何使extraClassPath工作?
答案 0 :(得分:-1)
您还需要在执行程序类路径中添加jar。
session = SparkSession \
.builder \
.config("spark.driver.extraClassPath", "/home/me/source/acme/.venv/lib/python3.6/site-packages/pyspark/jars/postgresql-42.2.6.jar") \
.config("spark.executor.extraClassPath", "/home/me/source/acme/.venv/lib/python3.6/site-packages/pyspark/jars/postgresql-42.2.6.jar") \
.getOrCreate()
编辑:
要在语义上复制spark.jars.package
,可以将spark.jars
与jar文件的绝对路径一起使用。同样,请确保检查您的jar并确认其对驱动程序具有适当的MENIFEST。