Я попробовал два следующих способа:
Метод 1:
Код: Выделить всё
from pyspark.sql import SparkSession
from createconnection import sql_connection
from datetime import datetime
import os
import sys
def getdata():
url, uname, pwd = sql_connection()
spark = SparkSession.builder.appName("MyApp").getOrCreate()
try:
jdbcDF = spark.read \
.format("jdbc") \
.option("url", url) \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.option("prepareQuery",'EXEC dbo.GetUserDetails') \
.option("query", 'SELECT * FROM @ResultTable') \
.option("user", uname) \
.option("password", pwd) \
.load()
jdbcDF.show()
# Flush the output to ensure it is sent immediately
sys.stdout.flush()
spark.stop()
except ValueError as error:
print("Connector write failed", error)
if __name__ == '__main__':
getdata()
Я хочу знать, можно ли вообще выполнить хранимую процедуру через искру или ее нужно разбить на несколько операторов sql внутри сценария искры и как это сделать.
Любая помощь или рекомендации приветствуются для решения этой проблемы.
Подробнее здесь: https://stackoverflow.com/questions/763 ... e-in-spark