[−][src]Trait differential_dataflow::operators::reduce::ReduceCore
Extension trait for the group_arranged differential dataflow method.
Required methods
fn reduce_core<L, T2>(&self, logic: L) -> Arranged<G, TraceAgent<T2>> where
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Val: Data,
T2::R: Monoid,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>, &mut Vec<(T2::Val, T2::R)>) + 'static,
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Val: Data,
T2::R: Monoid,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>, &mut Vec<(T2::Val, T2::R)>) + 'static,
Solves for output updates when presented with inputs and would-be outputs.
Unlike reduce_arranged, this method may be called with an empty input,
and it may not be safe to index into the first element.
At least one of the two collections will be non-empty.
Provided methods
fn reduce_abelian<L, T2>(&self, logic: L) -> Arranged<G, TraceAgent<T2>> where
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Val: Data,
T2::R: Abelian,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>) + 'static,
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Val: Data,
T2::R: Abelian,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>) + 'static,
Applies group to arranged data, and returns an arrangement of output data.
This method is used by the more ergonomic group, distinct, and count methods, although
it can be very useful if one needs to manually attach and re-use existing arranged collections.
Examples
extern crate timely; extern crate differential_dataflow; use differential_dataflow::input::Input; use differential_dataflow::operators::reduce::ReduceCore; use differential_dataflow::trace::Trace; use differential_dataflow::trace::implementations::ord::OrdValSpine; use differential_dataflow::hashable::OrdWrapper; fn main() { ::timely::example(|scope| { let trace = scope.new_collection_from(1 .. 10u32).1 .map(|x| (x, x)) .reduce_abelian::<_,OrdValSpine<_,_,_,_>>( move |_key, src, dst| dst.push((*src[0].0, 1)) ) .trace; }); }
Implementors
impl<G, K, V, R> ReduceCore<G, K, V, R> for Collection<G, (K, V), R> where
G: Scope,
G::Timestamp: Lattice + Ord,
K: ExchangeData + Hashable,
V: ExchangeData,
R: ExchangeData + Monoid, [src]
G: Scope,
G::Timestamp: Lattice + Ord,
K: ExchangeData + Hashable,
V: ExchangeData,
R: ExchangeData + Monoid,
fn reduce_core<L, T2>(&self, logic: L) -> Arranged<G, TraceAgent<T2>> where
T2::Val: Data,
T2::R: Monoid,
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>, &mut Vec<(T2::Val, T2::R)>) + 'static, [src]
T2::Val: Data,
T2::R: Monoid,
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>, &mut Vec<(T2::Val, T2::R)>) + 'static,
impl<G: Scope, K: Data, V: Data, T1, R: Monoid> ReduceCore<G, K, V, R> for Arranged<G, T1> where
G::Timestamp: Lattice + Ord,
T1: TraceReader<Key = K, Val = V, Time = G::Timestamp, R = R> + Clone + 'static,
T1::Batch: BatchReader<K, V, G::Timestamp, R>,
T1::Cursor: Cursor<K, V, G::Timestamp, R>, [src]
G::Timestamp: Lattice + Ord,
T1: TraceReader<Key = K, Val = V, Time = G::Timestamp, R = R> + Clone + 'static,
T1::Batch: BatchReader<K, V, G::Timestamp, R>,
T1::Cursor: Cursor<K, V, G::Timestamp, R>,
fn reduce_core<L, T2>(&self, logic: L) -> Arranged<G, TraceAgent<T2>> where
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Val: Data,
T2::R: Monoid,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>, &mut Vec<(T2::Val, T2::R)>) + 'static, [src]
T2: Trace + TraceReader<Key = K, Time = G::Timestamp> + 'static,
T2::Val: Data,
T2::R: Monoid,
T2::Batch: Batch<K, T2::Val, G::Timestamp, T2::R>,
T2::Cursor: Cursor<K, T2::Val, G::Timestamp, T2::R>,
L: Fn(&K, &[(&V, R)], &mut Vec<(T2::Val, T2::R)>, &mut Vec<(T2::Val, T2::R)>) + 'static,