返回信息流面试时被问到,一个路径下有day partition folders,但是日期不是连续的,每天需要读取已有的最晚日期的day partition folder,然后处理完数据后再把结果存到今天的day partitino里。应当怎么做。
我说应当每天把数据存到两个路径。一个路径有day partition,存储所有历史数据;另一个存最新的历史数据,每次覆写一遍。
面试官说我的方法不好,需要写两遍,并且多一个文件夹。他们组制定的标准做法是,读进来所有历史数据,然后过滤出日期最大的数据。
我说你们这方法不对啊,把历史数据全读进去,这得需要多大内存啊。最要命的是你这种方法需要排序所有历史数据的日期,并且还有选出最大的,这要多大的shuffle啊。
他说不存在我说的问题。
面试完了我想了几天几夜,也不觉得他说的方法合理。
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #37002同步于 2020/8/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
这种读取最晚day partition的方法是不是问题很大
PMS
2020/8/5镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
【 在 byr30205 的大作中提到: 】
: 你的方法是对的。另一种回答是把这种 row-level update 下沉到存储引擎,比如引入 delta lake,hudi 这种数据湖。
也就是说delta lake和hudi有类似写好的函数?
【 在 terrorblade 的大作中提到: 】
: 生成数据分区的时候 同时生成一个空的done分区,扫描的时候 扫最新的done分区 找相应的数据分区去处理
是的,我说的就是这种思路
就类似关系型数据库的 upsert。。
底层原理一般是先 append,再 merge。有些类似 LSM Tree 结构。
【 在 PMS 的大作中提到: 】
:
: 也就是说delta lake和hudi有类似写好的函数?