spark.driver.extraClassPath在虚拟PySpark环境中不起作用

时间:2019-08-09 18:44:07

标签: apache-spark pyspark

我正在将数据保存到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工作?

1 个答案:

答案 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。