适配器开发过程
- 首先在如下目录开发自定义适配器,具体如何开发见后续教程

- 编写好adapter后对
fate-serving-extension模块进行打包,在target下拿到fate-serving-extension-2.1.0.jar

打开
fate-serving的server模块部署目录下extension目录,通过xftp工具替换jar包cd /data/projects/fate-serving/server/extension

重新编写配置文件,更改使用的适配器
cd /data/project/fate-serving/server/confvim serving-server.properties

重启server
cd /data/project/fate-serving/server./service.sh restart
单个预测适配器如何开发
实现单个预测适配器,需要继承AbstractSingleFeatureDataAdaptor
public class CustomAdapter extends AbstractSingleFeatureDataAdaptor {@Overridepublic void init() {// init() 方法中可以直接使用environment对象// environment.getProperty("port");}@Overridepublic ReturnResult getData(Context context, Map<String, Object> featureIds) {// ...}}
- init用于获取配置文件中的参数,可用于获取自定义接口地址
- getData用于返回host端获取的特征值,特征值要根据featureIds(如:{“id”:123,”tel”:13000000000})中guest端传来数据进行获取,最终要返回一个ReturnResult类型的实例,这个实例要通过setData与setRetcode设置相关信息。
案例:
guest端传来的featureIds包括:id
host端数据源如图所示,第一行为标签,其余为数据,数据源位于server模块根目录下名为host_data.csv
对应的adaper代码为
public class MyFileAdapter extends AbstractSingleFeatureDataAdaptor {private static final Logger logger = LoggerFactory.getLogger(MyFileAdapter.class);@Overridepublic void init() {}@Overridepublic ReturnResult getData(Context context, Map<String, Object> featureIds) {ReturnResult returnResult = new ReturnResult();Map<String, Object> data = new HashMap<>();try {logger.info("testHost data path = {}", Paths.get(System.getProperty(Dict.PROPERTY_USER_DIR), "host_data.csv"));logger.info(featureIds.toString());List<String> lines = Files.readAllLines(Paths.get(System.getProperty(Dict.PROPERTY_USER_DIR), "host_data.csv"));String[] label = StringUtils.split(lines.get(0), ",");int id = (Integer)featureIds.get("id");logger.info(String.valueOf(id));int flag = 0;for (int i = 1; i < lines.size(); i++) {String[] item = StringUtils.split(lines.get(i), ",");if (Integer.parseInt(item[0]) == id) {for (int j = 1; j < item.length; j++) {data.put(label[j], Double.parseDouble(item[j]));}flag = 1;break;}}if(flag == 0){logger.info("未找到数据!");throw new Exception();}else{logger.info(data.toString());returnResult.setData(data);returnResult.setRetcode(StatusCode.SUCCESS);}} catch (Exception ex) {logger.error(ex.getMessage());returnResult.setRetcode(StatusCode.HOST_FEATURE_ERROR);}return returnResult;}}
其中,处理之后的data形式为:{“x1”:0.123,”x2”:-1.65}
