首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jep的Java和Python集成

使用Jep的Java和Python集成
EN

Stack Overflow用户
提问于 2018-10-16 07:30:46
回答 1查看 2.5K关注 0票数 2

我正在尝试使用Jep进行python和java集成。我使用Jep从java程序中将来自泡菜文件(rf.pkl)的随机森林模型加载为rf.pkl对象。我希望只加载一次,因此我希望通过从java发送"rfmodel“参数来调用python函数,从而执行python脚本prediction.py中定义的python函数(使用rf模型进行预测)。但是从java发送给python的参数在python中被读取为字符串。如何将python中的参数数据类型保留为sklearn.ensemble.forest.RandomForestClassifier?

代码语言:javascript
复制
Jep jep = new Jep();
jep.eval("import pickle");
jep.eval("clf = pickle.load(open('C:/Downloads/DSRFmodel.pkl', 'rb'))");
jep.eval("print(type(clf))");
Object randomForest = jep.getValue("clf");

jep.eval("import integration");
jep.set("arg1", requestId);
jep.set("arg2", randomForest);
jep.eval("result = integration.trainmodel(arg1, arg2)");

------------
python.py

import pickle
def trainmodel(requestid, rf):

//when rf is printed it is 'str' format.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 18:08:38

当Jep将Python对象转换为Java对象时,如果它不识别Python类型,它将返回Python对象的字符串表示形式,有关该行为的讨论请参见这只虫子。如果您正在运行Jep(3.8)的最新版本,您可以通过将一个Java类传递给getValue函数来覆盖此行为。创建PyObject类是为了充当任意python对象的通用包装器。下面的代码应该做您想做的事情:

代码语言:javascript
复制
Jep jep = new Jep();
jep.eval("import pickle");
jep.eval("clf = pickle.load(open('C:/Downloads/DSRFmodel.pkl', 'rb'))");
jep.eval("print(type(clf))");
Object randomForest = jep.getValue("clf", PyObject.class);

jep.eval("import integration");
jep.set("arg1", requestId);
jep.set("arg2", randomForest);
jep.eval("result = integration.trainmodel(arg1, arg2)");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52830122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档