尽管无法在 Python 脚本中使用 GlobalParameters(请参阅我之前的答案),但是您可以破解/滥用 Python 脚本的第二个输入来传递其他参数。在我的示例中,我称它们为元数据参数。
首先,我补充说:
- 名称为“realdata”的Web 服务输入模块(用于您的真实数据)
- 一个名称为“元数据”的Web 服务输入模块(我们将滥用这个模块将参数传递给我们的 Python)。
- 名称为“computedMetadata”的Web 服务输出模块
按如下方式连接模块:
如您所见,我还添加了一个真实数据集(餐厅评级)以及一个虚拟元数据 csv(手动输入数据)模块。
在本手册数据中,您必须预定义元数据参数,就像它们是带有标题的 csv 文件一样,并且只有一行来保存数据:
在示例中,sampleRate 和 bitsPerSample 都设置为 0。
然后,我的 Python 脚本将该假 csv 作为元数据接收,对其进行一些虚拟计算并将其作为列名返回:
import pandas as pd
def azureml_main(realdata = None, metadata = None):
theSum = metadata["sampleRate"][0] + metadata["bitsPerSample"][0]
outputString = "The sum of the sampleRate and the bitsPerSecond is " + str(theSum)
print(outputString)
return pd.DataFrame([outputString])
然后我将其发布为 Web 服务并使用 Node.js 调用它,如下所示:
httpreq.post('https://ussouthcentral.services.azureml.net/workspaces/xxx/services/xxx', {
headers: {
Authorization: 'Bearer xxx'
},
json: {
"Inputs": {
"realdata": {
"ColumnNames": [
"userID",
"placeID",
"rating"
],
"Values": [
[
"100",
"101",
"102"
],
[
"200",
"201",
"202"
]
]
},
"metadata": {
"ColumnNames": [
"sampleRate",
"bitsPerSample"
],
"Values": [
[
44100,
16
]
]
}
},
"GlobalParameters": {}
}
}, (err, res) => {
if(err) return console.log(err);
console.log(JSON.parse(res.body));
});
输出符合预期:
{ Results:
{ computedMetadata:
{ type: 'table',
value:
{ ColumnNames: [ '0' ],
ColumnTypes: [ 'String' ],
Values:
[ [ 'The sum of the sampleRate and the bitsPerSecond is 44116' ] ] } } } }
祝你好运!