如果调试解决python的Py4JJavaError(u’An error occurred while calling o90.load.\n’, JavaObject id=o91))
在写pyspark代码,连接mysql的表进行查询,代码如下:
def execute_mysql_query(query):
try:
# 从数据库加载数据
url = "jdbc:mysql://" + DB_HOST + ":" + DB_PORT + "/" + DB_NAME
df = spark.read.format("jdbc") \
.option("url", url) \
.option("dbtable", "(" + query + ") as temp") \
.option("user", DB_USER) \
.option("password", DB_PASSWORD) \
.option("driver", "com.mysql.jdbc.Driver") \
.load()
# 获取查询结果
result = df.select(col("count(1)").alias("count")).collect()[0]["count"]
return result
except Exception as e:
print("Error executing query:", e)
return None
没查到结果并打印结果如下:’Error executing query:’, Py4JJavaError(u’An error occurred while calling o90.load.\n’, JavaObject id=o91),一脸懵逼,不知什么地方出错。
要获取更详细的错误信息,可以通过访问 Py4JJavaError.java_exception
属性来获取 Java 端抛出的异常实例,进而获取其中的错误消息和堆栈信息。下面是修改后的代码示例,以获取更详细的错误信息:
def execute_mysql_query(query):
try:
# 从数据库加载数据
url = “jdbc:mysql://” + DB_HOST + “:” + str(DB_PORT) + “/” + DB_NAME
df = spark.read.format(“jdbc”) \
.option(“url”, url) \
.option(“dbtable”, “(” + query + “) as temp”) \
.option(“user”, DB_USER) \
.option(“password”, DB_PASSWORD) \
.option(“driver”, “com.mysql.jdbc.Driver”) \
.load()
# 获取查询结果
result = df.select(col("count(1)").alias("count")).collect()[0]["count"]
return result
except Exception as e:
print("Error executing query:", e)
if hasattr(e, 'java_exception'):
java_exception = e.java_exception
print("Java exception details:", java_exception)
# 输出 Java 异常的错误消息和堆栈信息
print("Java exception message:", java_exception.getMessage())
print("Java exception stack trace:", java_exception.getStackTrace())
return None
重新运行后果然报错信息很详细,查找出具体的问题了。