我正在尝试使用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?
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.发布于 2018-10-18 18:08:38
当Jep将Python对象转换为Java对象时,如果它不识别Python类型,它将返回Python对象的字符串表示形式,有关该行为的讨论请参见这只虫子。如果您正在运行Jep(3.8)的最新版本,您可以通过将一个Java类传递给getValue函数来覆盖此行为。创建PyObject类是为了充当任意python对象的通用包装器。下面的代码应该做您想做的事情:
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)");https://stackoverflow.com/questions/52830122
复制相似问题