java 使用CombineFn而不是CoGroupByKey来处理热键

zpgglvta  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(148)

我有两个非常大的PCollection <KV<Long,XYZ>><KV<Long,ABC>>。我需要创建一个PCollection <KV<XYZ,ABC>>,我可以使用CoGroupByKey.create()转换。它适用于较小的数据集,但在热键的情况下会卡住。我是新来的梁,我试图找出如何使用CombineFn来解决这个问题。现在我的代码看起来像这样

final PCollection <KV<Long,XYZ>> xyzKV;
final PCollection <KV<Long,ABC>> abcKV;
final TupleTag<XYZ> t1 = new TupleTag<>();
final TupleTag<ABC> t1 = new TupleTag<>();
final PCollection <KV<XYZ,ABC>> combinedCollection = 
                               KeyedPCollectionTuple.of(t1, xyzKV).and(t2, abcKV)
    .apply(CoGroupByKey.create());
    
// this works fine but has performance issues in case of hotkeys.
cbeh67ev

cbeh67ev1#

这取决于你使用的是哪种跑步者,以及他们提供了什么选项。一个类似的问题是Join two large volumne of PCollection has performance issue
如果您使用的是DataflowRunner,您可以启用shuffle服务来加快进程。但是,根据文档,默认情况下,此选项当前在Dataflow上启用。

相关问题