| shard_reduce | R Documentation |
Reduce shard results without gathering all per-shard returns on the master.
shard_reduce() executes map() over shards in parallel and combines results
using an associative combine() function. Unlike shard_map(), it does not
accumulate all per-shard results on the master; it streams partials as chunks
complete.
shard_reduce(
shards,
map,
combine,
init,
borrow = list(),
out = list(),
workers = NULL,
chunk_size = "auto",
profile = c("default", "memory", "speed"),
mem_cap = "2GB",
recycle = TRUE,
cow = c("deny", "audit", "allow"),
seed = NULL,
diagnostics = TRUE,
packages = NULL,
init_expr = NULL,
timeout = 3600,
max_retries = 3L,
health_check_interval = 10L
)
shards |
A |
map |
Function executed per shard. Receives shard descriptor as first argument, followed by borrowed inputs and outputs. |
combine |
Function |
init |
Initial accumulator value, combined exactly once on the master (see Initial value semantics). |
borrow |
Named list of shared inputs (same semantics as |
out |
Named list of output buffers/sinks (same semantics as |
workers |
Number of worker processes. |
chunk_size |
Shards to batch per worker dispatch. The default
|
profile |
Execution profile (same semantics as |
mem_cap |
Memory cap per worker (same semantics as |
recycle |
Worker recycling policy (same semantics as |
cow |
Copy-on-write policy for borrowed inputs (same semantics as |
seed |
RNG seed for reproducibility. When non- |
diagnostics |
Logical; collect diagnostics (default TRUE). |
packages |
Additional packages to load in workers. |
init_expr |
Expression to evaluate in each worker on startup. |
timeout |
Seconds to wait for each chunk. |
max_retries |
Maximum retries per chunk. |
health_check_interval |
Check worker health every N completions. |
For performance and memory efficiency, reduction is performed in two stages:
per-chunk partial reduction inside each worker, and
streaming combine of partials on the master, folded in chunk order.
A shard_reduce_result with fields:
value: final accumulator
failures: any permanently failed chunks
diagnostics: run telemetry including reduction stats
queue_status, pool_stats
init is combined exactly once, on the master, at the start of the final
fold: the result is combine(combine(combine(init, p1), p2), ...) where
p1, p2, ... are per-chunk partials in chunk order. Worker-side partials
are built without init: each chunk's partial starts from the chunk's
first mapped value. A non-neutral init (e.g. init = 10 with +)
therefore contributes exactly once, regardless of chunk_size or
workers. This requires combine to be associative and able to combine
two mapped values (not just an accumulator with a value).
res <- shard_reduce(
100L,
map = function(s) sum(s$idx),
combine = function(acc, x) acc + x,
init = 0,
workers = 2
)
pool_stop()
res$value
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.