用于查询Pandas数据框架的Azure ML Web服务+ Python

时间:2017-11-14 09:13:45

标签: python azure azure-web-app-service azure-machine-learning-studio

我想将Azure ML Web服务用于Python的非机器学习任务。目标如下:

我有一个像这样的熊猫DF:

   Id   Value
0  111  0.1
1  222  7.3
2  333  3.1
3  444  5.0

我可以成功查询此DF(Id的某一行的值是多少?):

float(df.loc[pot['Id'] == 222, 'Value'])

现在,我想在Azure ML Web Service中部署一个具有此功能的函数,其中函数使用上载的数据集作为修复查找表。我构造了一个函数,它获取一个Id号作为参数,在pre-uploade数据集中查找值并将其作为float返回:

from azureml import services
import pandas as pd

@services.publish(workspace_id, workspace_token)
@services.types(id=int)
@services.returns(float)
def my_func(id):
    my_df = ws.datasets["uploaded_df.csv"].to_dataframe()
    return float(my_df.loc[cent['Id'] == id, 'Value'])

我可以将它部署在Azure Web服务上,但是当我尝试运行测试查询时它会被卡住(甚至无法窥视细节)。这有什么问题?

1 个答案:

答案 0 :(得分:0)

让我首先准确描述一下这里发生了什么,以帮助您更好地理解它失败的原因。

@services注释有什么作用?

  1. 它实际上是在AML Studio(studio.azureml.net或区域等效物)中使用单个“执行Python脚本”模块构建实验DAG
  2. 其内容解压缩您定义的函数并将其应用于传入数据
  3. Workspace对象有什么作用?

    它连接到提供的Studio API,可以在“ws.datasets”中使用时提取数据集。

    那为什么不起作用?

    它不起作用,因为EPS现在在没有网络访问的多租户服务中运行,并且您的功能现在被沙箱阻止(即使您要重新初始化函数内的工作区对象 - 我不知道当http客户端关闭并稍后重新水化时实际发生的事情)

    我该怎么办?

    1. 您可以添加附加注释以更直接地解决我在此处看到的第一个问题:https://github.com/Azure/Azure-MachineLearning-ClientLibrary-Python/blob/master/azureml/services.py#L68
    2. 我个人会将代码复制到Studio并从那里发布Web服务 - 这样您就可以在部署服务之前迭代代码并更快地查看错误消息,这很难诊断