如果调试解决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

重新运行后果然报错信息很详细,查找出具体的问题了。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注