Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Spark(Databricks)JDBC python在SQL server上运行存储过程?_Python_Scala_Apache Spark_Jdbc_Databricks - Fatal编程技术网

如何从Spark(Databricks)JDBC python在SQL server上运行存储过程?

如何从Spark(Databricks)JDBC python在SQL server上运行存储过程?,python,scala,apache-spark,jdbc,databricks,Python,Scala,Apache Spark,Jdbc,Databricks,我有一个在SQL SERVER中使用下面的Scala代码在Databricks中执行存储过程的工作示例。但是我想知道在PythonJDBC中是否也可以这样做?我不能让它工作。请参见以下示例: SCALA中的工作代码 import java.sql.DriverManager import java.sql.Connection import org.apache.spark.sql.DataFrame import org.apache.spark.sql.SparkSession import

我有一个在SQL SERVER中使用下面的Scala代码在Databricks中执行存储过程的工作示例。但是我想知道在PythonJDBC中是否也可以这样做?我不能让它工作。请参见以下示例:

SCALA中的工作代码

import java.sql.DriverManager
import java.sql.Connection
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types.{StructType, StructField, StringType,IntegerType};
import java.sql.ResultSet

val username = "xxxxx"
val pass = "xxxxx"
val url = "jdbc:sqlserver://xxx.database.windows.net:1433;databaseName=xxx"
val table = "SalesLT.Temp3"
val query = s"EXEC sp_truncate_table '${table}'"

val conn = DriverManager.getConnection(url, username, pass)
val rs = conn.createStatement.execute(query)
迄今为止的Python代码

connector_type_sql_server_driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_hostname = "xxxx.database.windows.net"
jdbc_database = "xxxx"
jdbc_port = 1433
jdbc_url = f"jdbc:sqlserver://{jdbc_hostname}:{jdbc_port};database={jdbc_database}"
jdbc_spa_user = "xxx"
jdbc_spa_password = "xxx"


query = "EXEC sys.sp_tables"
query2 = "SELECT * FROM sys.tables"

jdbc_db = (spark.read
          .format("jdbc")
          .option("driver", connector_type_sql_server_driver)
          .option("url", jdbc_url)
          .option("query", query)
          .option("user", jdbc_spa_user)
          .option("password", jdbc_spa_password)
          .load()
          )
python中的query2正在工作,但任何以EXEC开头的东西似乎都不起作用

如果不可能,有人能详细解释一下为什么可以在Scala中而不是在databricks中用Python来完成吗?我想让它与Python一起工作,因为其他笔记本都已经使用Python了

多谢各位


/Baatch

是的,您可能只需要访问JDBC的底层Java类,如下所示:

#第一行是进入JDBC世界的主要入口点
driver\u manager=spark.\u sc.\u gateway.jvm.java.sql.DriverManager
connection=driver\u manager.getConnection(mssql\u url、mssql\u用户、mssql\u通行证)
connection.prepareCall(“EXEC sys.sp_tables”).execute()
连接。关闭()