这在正常数据块工作区中有效,但在Unity Catalog中无效
driver_manager = spark._sc._gateway.jvm.java.sql.DriverManager
con = driver_manager.getConnection(connection_string)
statement = con.prepareCall(query)
statement.execute()
statement.close()
con.close()
字符串
以下代码抛出错误:py4j.security.Py4JSecurityException: Method public static java.sql.Connection java.sql.DriverManager.getConnection(java.lang.String) throws java.sql.SQLException is not whitelisted on class class java.sql.DriverManager
我尝试为getConnection方法传递单独的参数,但听起来这个方法在Unity Catalog sqlsUrl = f"jdbc:sqlserver://{host}:{port};database={dbname}"
中已经改变了
username = 'test'
password = 'test'
con = jvm.java.sql.DriverManager.getConnection(sqlsUrl, username,password)
型
1条答案
按热度按时间bfnvny8b1#
启用了Unity Catalog且访问模式设置为“共享”的群集有许多限制,可将作业与运行在同一(共享)群集上的不同用户隔离。
正如他们所说:“这样用户就不能通过集群访问非特权数据。"
看到
解决方案是简单地使用访问模式设置为“单用户”的集群。无论如何,您的作业都将以某个用户的身份运行,因此通常您没有理由在生产中使用“共享”集群。
附言:在pyspark中使用
spark._sc._gateway.jvm.java.sql.DriverManager
创建连接并执行一些查询是一件非常奇怪的事情。你可能选择了错误的方法来做你需要做的事情。