从 PySpark 3.1.2 连接 Oracle DB - Py4JJavaError 失败
Posted
技术标签:
【中文标题】从 PySpark 3.1.2 连接 Oracle DB - Py4JJavaError 失败【英文标题】:Connecting Oracle DB from PySpark 3.1.2 - fails with Py4JJavaError 【发布时间】:2021-08-19 08:09:27 【问题描述】:我正在使用 Oracle 11G 试用 PySpark3.2.1。它失败并出现以下错误:
Py4JJavaError: An error occurred while calling o44.load.
: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
我的代码:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("PySpark_Oracle_Connection").getOrCreate()
driver = 'oracle.jdbc.OracleDriver'
url = 'jdbc:oracle:thin:@hostname:port/dbTEST'
user = 'myname'
password = 'mypswd'
table = 'mytable'
SPARK_CLASS_PATH = "C:\Oracle_Client\jdbc\lib\ojdbc8.jar"
df = spark.read.format('jdbc')\
.option('driver', driver)\
.option('url', url)\
.option('dbtable', table)\
.option('user',user)\
.option('password',password).load()
请尽快提供帮助。之前的帖子都翻过了,还是不行。
【问题讨论】:
通过spark-submit
提交spark应用时,您是否传递了这些参数---driver-class-path C:\Oracle_Client\jdbc\lib\ojdbc8.jar --jars C:\Oracle_Client\jdbc\lib\ojdbc8.jar
我正在使用 Spyder 执行。我不是开发人员。我是统计学家,只是通过向谷歌学习来尝试 PySpark 作为外行。如何在 Spyder pls 中的 python 代码中传递这个?
不确定 Spyder,但如果您已正确安装和配置了 spark,那么您将能够使用 spark-submit
命令运行 spark 应用程序。看看这个,还有一个 python 应用程序的信息 - spark.apache.org/docs/latest/submitting-applications.html
这些也是 - tutorialkart.com/apache-spark/… AND sparkbyexamples.com/spark/spark-submit-command
所有这些链接都在谈论如何在 Spark 上使用 Python。我需要如何在 windows10 中使用 jodbs.jar 运行 PySpark 包。我没有单独安装 Spark spark,但是我的 Spark 是 Anaconda 环境中 PySpark 包的一部分 - ~Anaconda3\Lib\site-packages\pyspark –
【参考方案1】:
Py4JJavaError: An error occurred while calling o44.load.
: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
错误本身表明了问题的根本原因,即当 spark 尝试从您的 oracle db 表中读取时,找不到 oracle.jdbc.OracleDriver
类。
所以现在,你只需要告诉 spark 找到你的罐子。这可以通过更改应该存在于$SPARK_HOME/conf/
目录中的spark-defaults.conf
文件来完成。如果不存在,则使用以下配置自行添加:
spark.driver.extraClassPath C:\Oracle_Client\jdbc\lib\ojdbc8.jar
spark.executor.extraClassPath C:\Oracle_Client\jdbc\lib\ojdbc8.jar
或者在提交作业时只使用 --jars 选项。
【讨论】:
很抱歉在我的 windows10 中找不到 SPARK_HOME。从谷歌搜索中尝试了各种东西,似乎没有什么对我有用。我对Java或jar一无所知。我是一名尝试 PySpark 的统计人员。请告诉我如何在 Windows10 机器中找到/设置 SPARK_HOME。 在 Windows 命令提示符下,尝试echo %SPARK_HOME%
当我在 CMD 上提交“echo %SPARK_HOME%”时,它只返回“%SPARK_HOME%”,没有别的。我尝试在 Windows 配置中设置 %SPARK_HOME%,然后 PySpark 本身失败。我在 "~Anaconda3\Lib\site-packages\pyspark\conf.py" 有一个 conf 文件,但是我无法在其中指定 jdbc jar。谢谢以上是关于从 PySpark 3.1.2 连接 Oracle DB - Py4JJavaError 失败的主要内容,如果未能解决你的问题,请参考以下文章