Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e76e599

Browse files
authored
Deprecate obsolete CombineFn.add_inputs. (#12802)
1 parent 80599ad commit e76e599

4 files changed

Lines changed: 20 additions & 68 deletions

File tree

sdks/python/apache_beam/transforms/combiners.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from __future__ import division
2424

2525
import copy
26+
import functools
2627
import heapq
2728
import operator
2829
import random
@@ -162,9 +163,6 @@ def create_accumulator(self):
162163
def add_input(self, accumulator, element):
163164
return accumulator + 1
164165

165-
def add_inputs(self, accumulator, elements):
166-
return accumulator + len(list(elements))
167-
168166
def merge_accumulators(self, accumulators):
169167
return sum(accumulators)
170168

@@ -938,8 +936,10 @@ def full_combine(self, elements):
938936
return self.combine_fn.apply(elements)
939937

940938
def add_only(self, elements):
941-
return self.combine_fn.add_inputs(
942-
self.combine_fn.create_accumulator(), elements)
939+
return functools.reduce(
940+
self.combine_fn.add_input,
941+
elements,
942+
self.combine_fn.create_accumulator())
943943

944944
def merge_only(self, accumulators):
945945
return self.combine_fn.merge_accumulators(accumulators)

sdks/python/apache_beam/transforms/combiners_test.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from __future__ import absolute_import
2222
from __future__ import division
2323

24+
import functools
2425
import itertools
2526
import random
2627
import sys
@@ -252,7 +253,8 @@ def test_top_key_py2(self):
252253
def test_sharded_top_combine_fn(self):
253254
def test_combine_fn(combine_fn, shards, expected):
254255
accumulators = [
255-
combine_fn.add_inputs(combine_fn.create_accumulator(), shard)
256+
functools.reduce(
257+
combine_fn.add_input, shard, combine_fn.create_accumulator())
256258
for shard in shards
257259
]
258260
final_accumulator = combine_fn.merge_accumulators(accumulators)

sdks/python/apache_beam/transforms/core.py

Lines changed: 12 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from __future__ import absolute_import
2323

2424
import copy
25+
import functools
2526
import inspect
2627
import logging
2728
import random
@@ -918,7 +919,9 @@ def add_input(self, mutable_accumulator, element, *args, **kwargs):
918919
raise NotImplementedError(str(self))
919920

920921
def add_inputs(self, mutable_accumulator, elements, *args, **kwargs):
921-
"""Returns the result of folding each element in elements into accumulator.
922+
"""DEPRECATED and unused.
923+
924+
Returns the result of folding each element in elements into accumulator.
922925
923926
This is provided in case the implementation affords more efficient
924927
bulk addition of elements. The default implementation simply loops
@@ -988,10 +991,14 @@ def apply(self, elements, *args, **kwargs):
988991
*args: Additional arguments and side inputs.
989992
**kwargs: Additional arguments and side inputs.
990993
"""
994+
if args or kwargs:
995+
add_input = lambda accumulator, element: self.add_input(
996+
accumulator, element, *args, **kwargs)
997+
else:
998+
add_input = self.add_input
991999
return self.extract_output(
992-
self.add_inputs(
993-
self.create_accumulator(*args, **kwargs), elements, *args,
994-
**kwargs),
1000+
functools.reduce(
1001+
add_input, elements, self.create_accumulator(*args, **kwargs)),
9951002
*args,
9961003
**kwargs)
9971004

@@ -1088,12 +1095,6 @@ def add_input(self, accumulator, element, *args, **kwargs):
10881095
accumulator = [self._fn(accumulator, *args, **kwargs)]
10891096
return accumulator
10901097

1091-
def add_inputs(self, accumulator, elements, *args, **kwargs):
1092-
accumulator.extend(elements)
1093-
if len(accumulator) > self._buffer_size:
1094-
accumulator = [self._fn(accumulator, *args, **kwargs)]
1095-
return accumulator
1096-
10971098
def merge_accumulators(self, accumulators, *args, **kwargs):
10981099
return [self._fn(_ReiterableChain(accumulators), *args, **kwargs)]
10991100

@@ -1165,12 +1166,6 @@ def add_input(self, accumulator, element):
11651166
accumulator = [self._fn(accumulator)]
11661167
return accumulator
11671168

1168-
def add_inputs(self, accumulator, elements):
1169-
accumulator.extend(elements)
1170-
if len(accumulator) > self._buffer_size:
1171-
accumulator = [self._fn(accumulator)]
1172-
return accumulator
1173-
11741169
def merge_accumulators(self, accumulators):
11751170
return [self._fn(_ReiterableChain(accumulators))]
11761171

@@ -2182,31 +2177,7 @@ def process(self, element, *args, **kwargs):
21822177
# Expected elements input to this DoFn are 2-tuples of the form
21832178
# (key, iter), with iter an iterable of all the values associated with key
21842179
# in the input PCollection.
2185-
if self.runtime_type_check:
2186-
# Apply the combiner in a single operation rather than artificially
2187-
# breaking it up so that output type violations manifest as TypeCheck
2188-
# errors rather than type errors.
2189-
return [(element[0], self.combinefn.apply(element[1], *args, **kwargs))]
2190-
2191-
# Add the elements into three accumulators (for testing of merge).
2192-
elements = list(element[1])
2193-
accumulators = []
2194-
for k in range(3):
2195-
if len(elements) <= k:
2196-
break
2197-
accumulators.append(
2198-
self.combinefn.add_inputs(
2199-
self.combinefn.create_accumulator(*args, **kwargs),
2200-
elements[k::3],
2201-
*args,
2202-
**kwargs))
2203-
# Merge the accumulators.
2204-
accumulator = self.combinefn.merge_accumulators(
2205-
accumulators, *args, **kwargs)
2206-
# Convert accumulator to the final result.
2207-
return [(
2208-
element[0], self.combinefn.extract_output(accumulator, *args,
2209-
**kwargs))]
2180+
yield element[0], self.combinefn.apply(element[1], *args, **kwargs)
22102181

22112182
def default_type_hints(self):
22122183
hints = self.combinefn.get_type_hints()

sdks/python/apache_beam/transforms/stats.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -724,27 +724,6 @@ def add_input(self, quantile_state, element):
724724
self._add_unbuffered(quantile_state, elements=[element])
725725
return quantile_state
726726

727-
def add_inputs(self, quantile_state, elements):
728-
"""Add new elements to the collection being summarized by quantile state.
729-
"""
730-
if not elements:
731-
return quantile_state
732-
733-
values = [
734-
element[0] for element in elements
735-
] if self._weighted else elements
736-
min_val = min(values)
737-
max_val = max(values)
738-
if quantile_state.is_empty():
739-
quantile_state.min_val = min_val
740-
quantile_state.max_val = max_val
741-
elif self._comparator(min_val, quantile_state.min_val) < 0:
742-
quantile_state.min_val = min_val
743-
elif self._comparator(max_val, quantile_state.max_val) > 0:
744-
quantile_state.max_val = max_val
745-
self._add_unbuffered(quantile_state, elements=elements)
746-
return quantile_state
747-
748727
def merge_accumulators(self, accumulators):
749728
"""Merges all the accumulators (quantile state) as one."""
750729
qs = self.create_accumulator()

0 commit comments

Comments
 (0)