FATE联邦学习框架java实践(一)

同系列文章:

FATE联邦学习框架入门指南 - 掘金 (juejin.cn)

FATE联邦学习框架:API实践Upload和DownLoad的踩坑记录 - 掘金 (juejin.cn)
项目源码FateTest - 码云 - 开源中国 (gitee.com)

因为公司技术栈和Fate的技术架构的原因,我们最终选择了采用Java调用接口的方式与FATE平台实现连通。目前为止,通过网络搜索对于Fate应用相关的文章都非常少,对于其详细系统性实践的文章更是一篇没有。

因此,这次实践可以说是目前为止,第一篇对于Fate在java实践的企业级探索。

任务梳理

具体的项目背景不方便透露,但是只需要知道项目对于Fate的具体要求就是,双方将用户存入Fate平台中,然后通过Fate的 隐私计算求交能力,返回双方的交集用户列表。

具体流程图如下:

我们需要隐私计算平台提供的功能

通过以上任务流程的梳理,我们需要的基础功能如下:

  1. 用户集管理:用于存储用户唯一标识,将不同用户存入不同集

  2. 用户集增、删功能:实现用户集转入、转出

  3. 交集判断:在两个用户集间判断是否为交集用户(需要跨平台)

根据对Fate的上下摸索,针对以上能力,Fate基本都能提供,但是还是存在一点不足。

Fate提供的功能

  1. Fate平台提供表概念,可以将数据集存入表中
  2. Fate仅有增删表的功能,但无表数据更新功能。
  3. Fate提供了intersrction模块,可以进行跨平台的隐私计算求交。

Fate的局限性

因为我这次的需求是做实时任务,而Fate更适合离线任务,所以这些局限性是对实时任务来说的。

  1. 没有表数据更新功能,意味着我们仅能通过下载表的csv文件后对表进行处理重新覆盖上传,来实现数据更新功能。同时这也意味着更大的IO开销和更高的时间成本。

  2. 数据上传或任务提交接口,请求接口后返回值的成功标识是指数据开始上传或者任务开始执行。仅能通过轮询任务状态来确定任务是否执行成功。 这也意味着更大的IO开销和更高的开发成本。

  3. Fate的表可以通过table bind绑定mysql数据表,但是我们不确定mysql数据源能不能预先导入数据,甚至能够通过更新mysql实现Fate表数据更新的功能。因为绑定没成功过。。。

Fate通过java实现基础的数据上传和导出

数据上传和下载接口只需要通过java请求官方文档API即可,但是还是有很多值得注意的地方

数据上传

数据上传接口的postman调试都费了很大的功夫,使用java调用更麻烦。

参考实现: java 实现带RequestBody传Json参数的GET请求 - 掘金 (juejin.cn)

1. 首先实现请求api的方法

2. 然后做好封装

数据下载

数据下载接口有两个,一个是导出数据的接口,结果返回为数据列表,一个是导出数据为文件的结果,结果为压缩文件。

但是返回结果列表的接口,最多能返回100条数据。

1. 同样首先实现请求api的方法

2. 因为结果返回为压缩包文件,所以实现了一个解压方法。

解压方法逻辑比较复杂。最终结果为将tar.gz文件中解压出的两个文件中保留结果数据文件并将其命名为指定名称。

3. 最后做好封装

相关推荐
cnkeysky8 小时前
idea 中的 maven 项目重新加载子模块
java·idea
Escalating_xu8 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
今天AI了吗8 小时前
什么是 AI Agent?它与直接调用大模型 API 有何区别
java·网络·人工智能·架构·java-ee
隐退山林8 小时前
JavaEE进阶:SpringAOP
java·java-ee
Wang's Blog8 小时前
Java框架快速入门: Spring Security+OAuth2之方法级安全注解
java·安全·spring
Zzj_tju9 小时前
VLM 读图评测:先审计评分器,再判断读错还是算错
人工智能·深度学习·机器学习·语言模型
JavacKaka9 小时前
LiteFlow规则引擎实战博客-2026-09-09
java
学渣超9 小时前
记一次复杂业务功能重构——从过程式长链路,到模板方法构建体系
java·架构·代码规范
Bs_MoneyMagnet9 小时前
基于springboot+vue的旅游景区点评系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·旅游
夜不会漫长9 小时前
C++:类和对象(2)
java·javascript·c++