如何在AzureML Web服务中使用以前定义的Pandas数据框?

时间:2018-06-20 13:33:52

标签: python pandas web-services azure

我想使用Python2.7内核通过Jupyter笔记本在AzureML Studio上部署AzureML Web服务。该Web服务将使用(除了训练有素的ML模型之外)以前定义的Pandas数据框。

现在,据我从here所了解,已发布函数引用的所有全局变量都将使用Pickle进行序列化,以便在使用Web服务时可以使用它们。确实,如果我发布一个使用先前定义的整数,函数或numpy数组的Web服务,我可以consume毫无问题地使用该Web服务:

from azureml import services
import pandas as pd
import numpy as np    

#Define some function...
def square(n):
    return n*n

#... and some variables we might want to use in the web service below
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)))
x = df.values

#Create the web service
@services.publish(workspace_id, authorization_token)
@services.types(number=int)
@services.returns(int)

def my_published_func(number):
    tmp = sum(sum(x == number))
    return square(tmp)

但是,一旦我尝试使用df内的数据帧my_published_func(例如,将x == number替换为df.values == number时),对Web服务的调用就会以下错误(似乎表明一些与序列化相关的问题):

  

{u'error':{u'message':u'模块执行遇到错误。',   u'code':u'ModuleExecutionError',u'details':[{u'message':u'Error   0085:脚本评估期间发生以下错误   查看输出日志以获取更多信息:\ r \ n ----------错误开始   来自Python解释器的消息---------- \ r \ n   执行函数:追溯(最近一次调用最近):\ n文件   “ \ server \ InvokePy.py”,行118,在executeScript \ n mod =   safe_module_import(script)\ n文件“ \ server \ InvokePy.py”,第79行,   在safe_module_import \ n中返回import_module(h)\ n文件   import_module \ n中的第37行中的“ C:\ pyhome \ lib \ importlib \ __ init__.py”   导入(名称)\ n \ n __user_function =中的文件“ \ temp \ 1263948264.py”,行1124   _deserialize_func(base64.decodestring(\'乱码的长字符串在这里'),globals())\ n文件“ \ temp \ 1263948264.py”,第1101行,   在_deserialize_func \ n codeArgs,funcArgs,updatedGlobals =   pickle.loads(data)\ nImportError:未命名模块   index.base \ n \ r \ n \ r \ n ----------来自Python的错误消息结束   解释器----------',u'code':u'85',u'target':u'执行Python   脚本RRS'}]}}

这是否意味着引用Pandas数据框的全局变量(即使它们可以是pickled)也不能在AzureML Web服务中使用,或者是否有办法实现?

0 个答案:

没有答案