KeyBy如何映射到物理分区

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

KeyBy如何映射到物理分区

zxyoung
Hi,请教下各位:
       我的场景是现在有个Keyby操作,但是我需要指定某一个key落地在某一个具体物理分区中。
       我注意到keyby中得KeySelector仅仅是逻辑的分区,其实还是通过hash的方式来物理分区,没有办法指定哪一个key到哪一个分区去做。
       我尝试使用partitionCustom中带有partitioner和keySelector的参数函数,但是发现没有办法直接使用类似Sum一类的聚合函数,实际测试发现Sum会将同一物理分区、但是不同Key的值都累加起来。
       例如Tuple2<id,time>,id=1/2/3的给分区0,id=4的给分区1,直接使用sum的话,会将id=1/2/3的time都累加起来。
       有什么方法能让keyby方法也能够物理分区吗?还是只能在partitionCustom后给map算子加逻辑使得累加操作正确。
Reply | Threaded
Open this post in threaded view
|

Re: KeyBy如何映射到物理分区

nobleyd
自定义分区可以的哈。
你说123都加起来那个不够具体,我猜你是直接用DataStream的sum,自然是全局sum。
分key的聚合必须是keyBy(...).sum(...)这样。

但是,partitionCustom返回的是DataStream。而如果继续keyBy会覆盖partitioner。

所以,你需要自己组装下transformation,也不难的。点进去看看源码怎么组装,抄一抄就可以。



zxyoung <[hidden email]> 于2020年11月6日周五 下午4:47写道:

> Hi,请教下各位:
>        我的场景是现在有个Keyby操作,但是我需要指定某一个key落地在某一个具体物理分区中。
>
>  我注意到keyby中得KeySelector仅仅是逻辑的分区,其实还是通过hash的方式来物理分区,没有办法指定哪一个key到哪一个分区去做。
>
>  我尝试使用partitionCustom中带有partitioner和keySelector的参数函数,但是发现没有办法直接使用类似Sum一类的聚合函数,实际测试发现Sum会将同一物理分区、但是不同Key的值都累加起来。
>
>  例如Tuple2<id,time>,id=1/2/3的给分区0,id=4的给分区1,直接使用sum的话,会将id=1/2/3的time都累加起来。
>        有什么方法能让keyby方法也能够物理分区吗?还是只能在partitionCustom后给map算子加逻辑使得累加操作正确。