자바 아파치 빔에 groupby.sortbytimestamp 클래스가 있다는 것을 알게되었습니다. 파이썬에는 아직 구현 된 기능이 있습니까? 그렇지 않은 경우 창에서 요소를 정렬하는 방법은 무엇입니까? DoFn에서 전체 창을 정렬 할 수 있다고 생각하지만, 더 좋은 방법이 있는지 알고 싶습니다.어떻게 파이썬 아파치 빔 창에서 요소를 주문할 수 있습니까?
3
A
답변
6
빔 (Python 또는 Java)에 내장 된 값 정렬이 없습니다. 바로 지금, 가장 좋은 방법은 언급 한 것처럼 DoFn에서 직접 값을 정렬하는 것입니다.
1
다음은 CombineFn을 사용하는 솔루션입니다. TreeSet을 사용하여 데이터를 중복 제거하는 보너스가 추가되었습니다. 또한 창에 대한 데이터가 단일 작업자의 메모리에 적합하도록 충분히 작아야합니다.
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());
}
}
는 어디 클래스를 찾는? 더 이상 존재하지 않는다고 생각합니다 : https://github.com/apache/beam/search?utf8=%E2%9C%93&q=sortbytimestamp&type= – skeller88