本文概述
本文了解如何从Jupyter Notebook远程发送R和Python执行到SQL服务器。
介绍
你是否知道可以从Jupyter Notebook或任何IDE在SQL Server中远程执行R和Python代码? SQL Server中的机器学习服务消除了移动数据的需求。你可以在数据库中执行R / Python代码, 而不是通过网络传输大型敏感数据或在ML训练中失去使用示例csv文件的准确性。你可以在任何地方的Jupyter Notebooks, RStudio, PyCharm, VSCode, Visual Studio中工作, 然后将函数执行发送到SQL Server, 从而将智能带到数据所在的地方。
本教程将向你展示如何从Juptyter笔记本发送python代码以在SQL Server中执行的示例。相同的原则也适用于R和任何其他IDE。如果你喜欢通过视频学习, 那么本教程也会在YouTube上发布:
环境设置先决条件
1.在SQL Server上安装ML Services
为了使R或Python在SQL中执行, 首先需要安装和配置Machine Learning Services功能。请参阅此操作指南。
2.通过Microsoft的Python客户端安装RevoscalePy
为了从Jupyter Notebook将Python执行发送到SQL, 你需要使用Microsoft的RevoscalePy软件包。要获取RevoscalePy, 请下载并安装Microsoft的ML Services Python客户端。文档页面或直接下载链接(对于Windows)。
下载后, 以管理员身份打开powershell并导航到下载文件夹。使用以下命令开始安装(随意定制安装文件夹):。\ Install-PyForMLS.ps1 -InstallFolder” C:\ Program Files \ MicrosoftPythonClient”
请耐心等待, 安装可能需要一些时间。安装完成后, 导航到安装的新路径。让我们创建一个空文件夹并打开Jupyter Notebooks:mkdir JupyterNotebooks;。 cd JupyterNotebooks; .. \ Scripts \ jupyter-notebook
使用Python 3解释器创建一个新笔记本:
要测试是否已完成所有设置, 请在第一个单元格中导入revoscalepy并执行。如果没有错误消息, 则准备前进。
数据库设置(仅本教程需要)
对于本教程的其余部分, 如果你不想复制粘贴所有代码, 则可以从Github克隆此Jupyter Notebook。此数据库设置仅需一步即可, 以确保你拥有与本教程相同的数据。你无需执行任何这些设置步骤即可使用自己的数据。
1.创建一个数据库
修改服务器的连接字符串, 然后使用pyodbc创建新数据库。
import pyodbc
# creating a new db to load Iris sample in
new_db_name = "MLRemoteExec"
connection_string = "Driver=SQL Server;Server=localhost\MSSQLSERVER2017;Database={0};Trusted_Connection=Yes;"
cnxn = pyodbc.connect(connection_string.format("master"), autocommit=True)
cnxn.cursor().execute("IF EXISTS(SELECT * FROM sys.databases WHERE [name] = '{0}') DROP DATABASE {0}".format(new_db_name))
cnxn.cursor().execute("CREATE DATABASE " + new_db_name)
cnxn.close()
print("Database created")
2.从SkLearn导入虹膜样本
Iris是适用于初学者数据科学教程的流行数据集。默认情况下, 它包含在sklearn软件包中。
from sklearn import datasets
import pandas as pd
# SkLearn has the Iris sample dataset built into the package
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
3.使用RecoscalePy API创建表并加载虹膜数据
(你也可以使用pyodbc, sqlalchemy或其他软件包执行此操作)
from revoscalepy import RxSqlServerData, rx_data_step
# Example of using RX APIs to load data into SQL table. You can also do this with pyodbc
table_ref = RxSqlServerData(connection_string=connection_string.format(new_db_name), table="Iris")
rx_data_step(input_data = df, output_file = table_ref, overwrite = True)
print("New Table Created: Iris")
print("Sklearn Iris sample loaded into Iris table")
定义要发送到SQL Server的函数
编写要在SQL中执行的所有python代码。在此示例中, 我们在虹膜数据集上创建一个散布矩阵, 并且仅将.png的字节流返回给Jupyter Notebooks以在客户端上进行渲染。
def send_this_func_to_sql():from revoscalepy import RxSqlServerData, rx_import
from pandas.tools.plotting import scatter_matrix
import matplotlib.pyplot as plt
import io
# remember the scope of the variables in this func are within our SQL Server Python Runtime
connection_string = "Driver=SQL Server;Server=localhost\MSSQLSERVER2017;Database=MLRemoteExec;Trusted_Connection=Yes;"# specify a query and load into pandas dataframe df
sql_query = RxSqlServerData(connection_string=connection_string, sql_query = "select * from Iris")
df = rx_import(sql_query)
scatter_matrix(df)
# return bytestream of image created by scatter_matrix
buf = io.BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return buf.getvalue()
将执行发送到SQL
现在, 我们终于完成了设置, 请查看发送远程执行的真正难度!首先, 导入revoscalepy。创建一个sql_compute_context, 然后使用RxExec将任何函数的执行无缝发送到SQL Server。无需将原始数据从SQL传输到Jupyter Notebook。所有计算都在数据库内进行, 并且仅返回了图像文件以进行显示。
from IPython import display
import matplotlib.pyplot as plt
from revoscalepy import RxInSqlServer, rx_exec
# create a remote compute context with connection to SQL Server
sql_compute_context = RxInSqlServer(connection_string=connection_string.format(new_db_name))
# use rx_exec to send the function execution to SQL Server
image = rx_exec(send_this_func_to_sql, compute_context=sql_compute_context)[0]
# only an image was returned to my jupyter client. All data remained secure and was manipulated in my db.
display.Image(data=image)
尽管此示例对于Iris数据集来说是微不足道的, 但请想象一下你现在解锁的其他规模, 性能和安全性功能。你可以使用任何最新的开源R / Python软件包在SQL Server中的大量数据上构建深度学习和AI应用程序。我们还在Microsoft的RevoScaleR和RevoScalePy API中提供了领先的高性能算法。将它们与开源世界中的最新创新结合使用, 可以使你为应用程序带来无与伦比的选择, 性能和可扩展性。
学到更多
查阅SQL Machine Learning Services文档, 以了解如何使用SQL存储过程轻松部署R / Python代码, 从而使其在ETL流程或任何应用程序中均可访问。在数据库中训练和存储机器学习模型, 从而将智能带到数据所在的地方。
SQL Server中的基本R和Python执行:https://aka.ms/BasicMLServicesExecution
在SQL Server中设置机器学习服务:https://aka.ms/SetupMLServices
Github上的端到端教程解决方案:https://microsoft.github.io/sql-ml-tutorials/
其他YouTube教程:
- 如何安装SQL Server机器学习服务:https://aka.ms/InstallMLServices
- 如何启用SQL Server机器学习服务:https://aka.ms/EnableMLServices
- SQL中R和Python执行的基础知识:https://aka.ms/ExecuteMLServices
如果你有兴趣了解更多信息, 请查看srcmini的入门课程。
- 数据科学Python简介
- R介绍
- SQL for Data Science简介
评论前必须登录!
注册