我能够在Azure Databricks中使用PySpark执行简单的SQL语句,但我想改为执行存储过程。下面是我尝试过的PySpark代码。
#initialize pyspark
import findspark
findspark.init('C:\Spark\spark-2.4.5-bin-hadoop2.7')
#import required modules
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
from pyspark.sql import *
import pandas as pd
#Create spark configuration object
conf = SparkConf()
conf.setMaster("local").setAppName("My app")
#Create spark context and sparksession
sc = SparkContext.getOrCreate(conf=conf)
spark = SparkSession(sc)
table = "dbo.test"
#read table data into a spark dataframe
jdbcDF = spark.read.format("jdbc") \
.option("url", f"jdbc:sqlserver://localhost:1433;databaseName=Demo;integratedSecurity=true;") \
.option("dbtable", table) \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.load()
#show the data loaded into dataframe
#jdbcDF.show()
sqlQueries="execute testJoin"
resultDF=spark.sql(sqlQueries)
resultDF.show(resultDF.count(),False)
这不起作用-我该怎么做?
截止目前,尚不支持通过来自azure databricks的JDBC连接运行存储过程。但是您的选择是:
1-使用pyodbc
库连接并执行您的过程。但是,通过使用此库,这意味着您将在所有工作线程空闲时在驱动程序节点上运行代码。有关详细信息,请参见本文。https://datathirst.net/blog/2018/10/12/executing-sql-server-stored-procedures-on-databricks-pyspark
2-使用SQL
表函数而不是过程。从某种意义上说,您可以使用在SQL查询的FORM
子句中可以使用的任何东西。
3-由于您处于天蓝色环境中,因此结合使用天蓝色数据工厂(以执行您的过程)和天蓝色数据砖可以帮助您构建功能强大的管道。