使用Jep实现Java与Python的集成

使用Jep实现Java与Python的集成,java,python,jepp,Java,Python,Jepp,我正在尝试使用Jep实现python和java的集成。我已经使用Jep从java程序中的pickle文件(rf.pkl)将randomforest模型加载为sklearn.employ.forest.RandomForestClassifier对象。 我希望这次加载是一次性的,因此我希望通过从java发送“rfmodel”参数调用python函数来执行python脚本prediction.py中定义的python函数(使用rf模型进行预测)。 但是从java发送到python的参数在python

我正在尝试使用Jep实现python和java的集成。我已经使用Jep从java程序中的pickle文件(rf.pkl)将randomforest模型加载为sklearn.employ.forest.RandomForestClassifier对象。 我希望这次加载是一次性的,因此我希望通过从java发送“rfmodel”参数调用python函数来执行python脚本prediction.py中定义的python函数(使用rf模型进行预测)。 但是从java发送到python的参数在python中被读取为字符串。如何将python中参数的数据类型保留为sklearn.employee.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.

当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)");

你的绳子看起来怎么样?而且,这不是一个Java问题。您已经有了一个Python字符串,所以您的问题是“如何从字符串创建klearn.employee.forest.RandomForestClassifier对象?”