pub struct JoinStream<Key, Out1: ExchangeData, Out2: ExchangeData, OperatorChain1, OperatorChain2, Keyer1, Keyer2>where
OperatorChain1: Operator<Out = Out1>,
OperatorChain2: Operator<Out = Out2>,
Keyer1: KeyerFn<Key, Out1>,
Keyer2: KeyerFn<Key, Out2>,{ /* private fields */ }Expand description
Intermediate stream type for building the join between two streams.
This type has methods for selecting the ship strategy of the join, later you will be able to select the local strategy, and finally the variant of the join.
Implementations§
Source§impl<Key: Data, Out1: ExchangeData, Out2: ExchangeData, OperatorChain1, OperatorChain2, Keyer1, Keyer2> JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>
impl<Key: Data, Out1: ExchangeData, Out2: ExchangeData, OperatorChain1, OperatorChain2, Keyer1, Keyer2> JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>
Sourcepub fn ship_hash(self) -> JoinStreamShipHash<Key, Out1, Out2, Keyer1, Keyer2>where
Key: DataKey,
pub fn ship_hash(self) -> JoinStreamShipHash<Key, Out1, Out2, Keyer1, Keyer2>where
Key: DataKey,
Use the Hash Repartition strategy.
With this strategy the two streams are shuffled (like a group-by), pointing the message with the same key to the same replica. The key must be hashable.
Sourcepub fn ship_broadcast_right(
self,
) -> JoinStreamShipBroadcastRight<Key, Out1, Out2, Keyer1, Keyer2>
pub fn ship_broadcast_right( self, ) -> JoinStreamShipBroadcastRight<Key, Out1, Out2, Keyer1, Keyer2>
Use the Broadcast-Forward strategy.
The left side won’t be sent to the network, while the right side is broadcasted. This is recommended when the left side is really big and the left side really small.
This does not require the key to be hashable.
Auto Trait Implementations§
impl<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2> Freeze for JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>
impl<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2> !RefUnwindSafe for JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>
impl<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2> Send for JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>where
Key: Send,
impl<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2> Sync for JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>
impl<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2> Unpin for JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>
impl<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2> !UnwindSafe for JoinStream<Key, Out1, Out2, OperatorChain1, OperatorChain2, Keyer1, Keyer2>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more