3

java apache ビームにはクラス groupby.sortbytimestamp があることに気付きました python にはまだその機能が実装されていますか? そうでない場合、ウィンドウ内の要素をソートする方法は何ですか? ウィンドウ全体を DoFn で並べ替えることができると思いますが、もっと良い方法があるかどうか知りたいです。

4

2 に答える 2

1

これは、CombineFn を使用したソリューションです。TreeSet を使用してデータを重複排除するという追加のボーナスがあります。また、ウィンドウのデータが 1 つのワーカーのメモリに収まるほど小さいことを確認する必要があります。

public static class DedupAndSortByTime extends Combine.CombineFn<MarketData, TreeSet<MarketData>, List<MarketData>> {
@Override
public TreeSet<MarketData> createAccumulator() {
    return new TreeSet<>(Comparator
            .comparingLong(MarketData::getEventTime)
            .thenComparing(MarketData::getOrderbookType));
}

@Override
public TreeSet<MarketData> addInput(TreeSet<MarketData> accum, MarketData input) {
    accum.add(input);
    return accum;
}

@Override
public TreeSet<MarketData> mergeAccumulators(Iterable<TreeSet<MarketData>> accums) {

    TreeSet<MarketData> merged = createAccumulator();
    for (TreeSet<MarketData> accum : accums) {
        merged.addAll(accum);
    }
    return merged;
}

@Override
public List<MarketData> extractOutput(TreeSet<MarketData> accum) {
    return Lists.newArrayList(accum.iterator());
}

}

于 2017-12-14T00:05:52.223 に答える