apache-spark - spark.driver.extraClassPath 在虚拟 PySpark 环境中不起作用
问题描述
我正在将数据保存到 Postgres 数据库,但作业失败,原因如下:
py4j.protocol.Py4JJavaError: 调用 o186.jdbc 时出错。:java.lang.ClassNotFoundException:org.postgresql.Driver
spark/jars
直到我在全局安装 spark 时将 postgres jar 下载到该文件夹。
我感觉搬到了一台新机器上,而是只通过 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 工作?
解决方案
您还需要在执行程序类路径中添加 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。
推荐阅读
- sql - Oracle 连接两个 int 列,使它们成为日期并从中选择一个日期
- python - (错误:(-215:断言失败)total(os [i])> 0在函数'getLayerShapesRecursively'中)当对图像进行上采样时
- html - 的孩子们即使属性显式设置为继承,元素也不继承任何属性
- javascript - 当我点击切换按钮(在重新打开的模式中)时,关闭并重新打开模式额外的点击事件再次触发
- reactjs - 如何使用反应钩子在不刷新页面的情况下更新数据?
- python - pytransitions 中的终端/接收器状态
- node.js - Todoapp 无法点击其他按钮
- jquery - 数据表自动分页未显示正确的行数且未重置行计数器
- android - 如何显示带有日期和每月费用总额的列表标题
- java - Java Web 应用程序未在 Docker 容器内运行