schrodinger.seam.transforms.samplers module¶
- class schrodinger.seam.transforms.samplers.RandomSample(n: int, seed: Optional[int] = None, distinct=False)¶
Bases:
PTransformA PTransform that returns approximately n random elements.
On average, the number of elements sampled will be at most 0.3% off from
n. For small numbers ofn(less than or equal to 100,000), it will be exactlyn.The seed value is only used if n is larger than 100,000.
Example usage:
>>> with beam.Pipeline() as p: ... sample = (p | beam.Create(range(10)) ... | RandomSample(3)) ... # sample will contain three randomly selected elements
If
distinctis True, then the input pcollection is first deduplicated before sampling.- N_CUTOFF = 100000¶
- __init__(n: int, seed: Optional[int] = None, distinct=False)¶
- display_data() dict¶
Returns the display data associated to a pipeline component.
It should be reimplemented in pipeline components that wish to have static display data.
- Returns:
Dict[str, Any]: A dictionary containing
key:valuepairs. The value might be an integer, float or string value; aDisplayDataItemfor values that have more data (e.g. short value, label, url); or aHasDisplayDatainstance that has more display data that should be picked up. For example:{ 'key1': 'string_value', 'key2': 1234, 'key3': 3.14159265, 'key4': DisplayDataItem('apache.org', url='http://apache.org'), 'key5': subComponent }
- WithCount()¶
Returns a tuple of the sampled pcollection and a pcollection containing the number of inputs that were sampled from.
Example usage:
>>> with beam.Pipeline() as p: ... sample, count = (p | beam.Create([1, 1, 2, 2]) ... | RandomSample(3, distinct=True).WithCount()) ... # sample will contain three randomly selected elements ... # count will contain the number of elements in the input pcollection (2)
- class schrodinger.seam.transforms.samplers.ThrottleConfig(*, max_cpu_time_sec: float, elements_per_sec: float, max_sample_size: int, distinct: bool = False, seed: int | None = None)¶
Bases:
BaseModelConfiguration for
Throttle.Can also be used standalone to compute the sample size without creating a full
ThrottlePTransform.- Parameters:
max_cpu_time_sec – total CPU time budget in seconds (typically
num_workers * avg_worker_time).elements_per_sec – historical throughput of the inner transform.
max_sample_size – upper bound on the number of sampled elements.
distinct – if True, deduplicate elements before sampling.
seed – random seed for reproducible sampling.
- max_cpu_time_sec: float¶
- elements_per_sec: float¶
- max_sample_size: int¶
- distinct: bool¶
- seed: int | None¶
- property sample_size: int¶
The number of elements to sample, at least 1.
- model_config: ClassVar[ConfigDict] = {}¶
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].
- class schrodinger.seam.transforms.samplers.Throttle(inner: PTransform, *, max_cpu_time_sec: float, elements_per_sec: float, max_sample_size: int, distinct: bool = False, seed: int | None = None)¶
Bases:
PTransformWraps a PTransform with a RandomSample pre-filter to limit the number of elements processed, based on a compute budget.
The sample size is computed as:
sample_size = min(max_cpu_time_sec * elements_per_sec, max_sample_size)
where
elements_per_secis the historical throughput of the inner transform andmax_cpu_time_secis the total CPU time budget the caller is willing to spend (typicallynum_workers * avg_worker_time).The output type is determined by the inner transform and is not annotated on this class.
Example usage:
result = pcoll | Throttle( MyExpensiveTransform(), max_cpu_time_sec=num_workers * 600, elements_per_sec=2.0, max_sample_size=100_000, )
- __init__(inner: PTransform, *, max_cpu_time_sec: float, elements_per_sec: float, max_sample_size: int, distinct: bool = False, seed: int | None = None)¶