簡體   English   中英

使用Jep進行Java和Python集成

[英]Java and Python Integration using Jep

我正在嘗試使用Jep進行python和java集成。 我已經使用Jep從Java程序中將泡菜文件(rf.pkl)中的randomforest模型加載為sklearn.ensemble.forest.RandomForestClassifier對象。 我希望這種加載是一次,因此我想通過從Java發送“ rfmodel”參數來調用python函數來執行在python腳本Forecast.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.

如果Jep無法識別Python類型,則將Python對象轉換為Java對象時,它將返回Python對象的String表示形式,有關此行為的討論,請參見此bug 如果您正在運行最新版本的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)");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM