个性化阅读
专注于IT技术分析

SQL中的远程Python和R

本文概述

本文了解如何从Jupyter Notebook远程发送R和Python执行到SQL服务器。

SQL中的远程Python和R 1

介绍

你是否知道可以从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上发布:

SQL中的远程Python和R 2

环境设置先决条件

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解释器创建一个新笔记本:

SQL中的远程Python和R 2

要测试是否已完成所有设置, 请在第一个单元格中导入revoscalepy并执行。如果没有错误消息, 则准备前进。

SQL中的远程Python和R 3

数据库设置(仅本教程需要)

对于本教程的其余部分, 如果你不想复制粘贴所有代码, 则可以从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简介
赞(0)
未经允许不得转载:srcmini » SQL中的远程Python和R

评论 抢沙发

评论前必须登录!