通过POST REST API调用向Rapidminer服务发送JSON数据

KostasBonikosKostasBonikos 成员职位:25Maven
2018年11月编辑 知识库

本文处理JSON文件。

有关CSV上传,请参阅:

http://community.www.turtlecreekpls.com/t5/RapidMiner-Server-Knowledge-Base/Scoring-a-whole-file-with-a-POST-API-call-to-Rapidminer-Server/ta-p/37397

XML:

http://community.www.turtlecreekpls.com/t5/RapidMiner-Server-Knowledge-Base/How-to-send-an-XML-data-file-to-a-Rapidminer-Service-through-a/ta-p/37478

当我们想要将整个记录列表作为文件或json数据流发送到服务器以进行评分或培训时;我们需要一个POST呼叫。

在我们开始之前,了解如何进行POST调用可能有点令人生畏,因为它不像通过web浏览器传递单个值那么简单,而且很多文章都在讨论如何通过编程语言进行POST调用。我们将使用cURL,这是一个通过URL语法发送和接收文件的命令行工具。它有很多参数,但我们现在只需要两个参数,更多的细节可以通过在命令行中输入“curl -h”来找到https://en.wikipedia.org/wiki/CURL

让我们从一个非常简单的过程开始,它训练一个决策树来对客户进行分类。它意味着能够预测“Response”属性。

每日demo.png

数据样本如下:

每日演示数据。png

对于部署,我们有另一个流程,它导入上面基于已知响应的数据构建的模型,并将其应用于未知响应的数据。

json score.png

请注意“Read Document”操作符是如何连接到流程画布的输入端口的。这样它就可以通过POST上传从我们将要创建的服务接收数据。此操作符当前未指向任何文件。

还有一个“Cut Document”操作符,它是将JSON文件划分为每个记录的JSON文档所必需的,以便“JSON to Data”操作符可以解析它们。“JSON to Data”操作符意味着摄取JSON文档的集合,而不是单个文件,这就是为什么我们使用以下参数将文档切割成集合的原因:

Json cut doc parameters.png

请注意,在上面的步骤1到4中,我们使用JsonPath表示法来解析文件和“$.”参数。对于其他文件,这个参数可能会变得更加复杂。

在线研究JsonPath表示法和正则表达式可能是值得的。

在创建服务之前,请记住,我们要传递的用于评分的数据在response属性中没有值,这些值将被预测。

每日演示数据无响应。png

现在让我们在Rapidminer服务器中创建服务:

创建service.png

没有特殊的参数或宏,只要它指向正确的部署流程即可。然后我们测试该服务以获取URL,在本例中为:

http://RMUK-KBONIKOS:8080/api/rest/process/POSTtest ?

我们可以在命令行中使用curl,在Windows中,可以从开始菜单中输入“cmd”启动curl,然后我们可以输入以下curl命令:

curl——user admin——upload-file C:\test。json http://<您的服务器>: 8080 / api /休息/过程/ POSTtest ?

或者,curl——user admin——data{json数据}http://<您的服务器>: 8080 / api /休息/过程/ POSTtest ?

本例中的用户为“admin”,文件为“test”。json并保存在C:驱动器中,文件的路径可以更改。当执行此操作时,将要求您输入用户密码,然后您应该得到XML格式的评分记录列表,在本例中,这取决于定义服务时选择的输出格式。

result.png

有了上面的帮助,您应该能够创建一个进程,并将其作为Rapidminer Server中的服务公开,然后测试它是否能够通过POST上传接收JSON数据或文件,并进行评分并返回输出。

IngoRM Thomas_Ott yyhuang 罗宾 Andy2

评论

  • Thomas_OttThomas_Ott RapidMiner认证分析师,RapidMiner认证专家,成员职位:1761年独角兽

    哦,这很好。谢谢你!

  • HarshMahajanHarshMahajan 成员职位:2新手
    我用同样的方法。而是在body中使用post request通过POSTMAN传递文件。
    它显示以下错误
    请帮助



    "进程执行失败:'No input for port '读取文档。文件(连接)'。'。详细的错误信息:'指定的端口没有收到任何输入。端口未连接或前面的操作符未提供任何输出。’”
登录注册置评。