Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 127% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 161% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 188% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 101% | 0% |
Dask is a Python library for parallel and distributed computing that enables three critical capabilities:
Dask scales from laptops (processing ~100 GiB) to clusters (processing ~100 TiB) while maintaining familiar Python APIs.
Current upstream: dask 2026.3.0 (PyPI, March 2026). Docs: docs.dask.org. Since 2025.1.0, the expression-based DataFrame API with query planning is the only implementation — do not install dask-expr separately or set dataframe.query-planning: False.
bashuv pip install "dask>=2025.1"
For a typical pandas/NumPy workflow with the distributed scheduler and dashboard:
bashuv pip install "dask[complete]"
Remote object storage (S3, GCS, Azure):
bashuv pip install s3fs # s3:// paths uv pip install gcsfs # gs:// paths
Requires Python 3.10+ (3.9 support dropped in 2024.12). DataFrame I/O requires PyArrow 16+ (as of dask 2026.1.2).
This skill should be used when:
Dask provides five main components, each suited to different use cases:
Purpose: Scale pandas operations to larger datasets through parallel processing.
When to Use:
Reference Documentation: For comprehensive guidance on Dask DataFrames, refer to references/dataframes.md which includes:
map_partitionsQuick Example:
pythonimport dask.dataframe as dd # Read multiple files as single DataFrame ddf = dd.read_csv('data/2024-*.csv') # Operations are lazy until compute() filtered = ddf[ddf['value'] > 100] result = filtered.groupby('category').mean().compute()
Key Points:
.compute() calledmap_partitions for efficient custom operationsPurpose: Extend NumPy capabilities to datasets larger than memory using blocked algorithms.
When to Use:
Reference Documentation: For comprehensive guidance on Dask Arrays, refer to references/arrays.md which includes:
map_blocksQuick Example:
pythonimport dask.array as da # Create large array with chunks x = da.random.random((100000, 100000), chunks=(10000, 10000)) # Operations are lazy y = x + 100 z = y.mean(axis=0) # Compute result result = z.compute()
Key Points:
map_blocks for operations not available in DaskPurpose: Process unstructured or semi-structured data (text, JSON, logs) with functional operations.
When to Use:
Reference Documentation: For comprehensive guidance on Dask Bags, refer to references/bags.md which includes:
Quick Example:
pythonimport dask.bag as db import json # Read and parse JSON files bag = db.read_text('logs/*.json').map(json.loads) # Filter and transform valid = bag.filter(lambda x: x['status'] == 'valid') processed = valid.map(lambda x: {'id': x['id'], 'value': x['value']}) # Convert to DataFrame for analysis ddf = processed.to_dataframe()
Key Points:
foldby instead of groupby for better performancePurpose: Build custom parallel workflows with fine-grained control over task execution and dependencies.
When to Use:
Reference Documentation: For comprehensive guidance on Dask Futures, refer to references/futures.md which includes:
Quick Example:
pythonfrom dask.distributed import Client client = Client() # Create local cluster # Submit tasks (executes immediately) def process(x): return x ** 2 futures = client.map(process, range(100)) # Gather results results = client.gather(futures) client.close()
Key Points:
Purpose: Control how and where Dask tasks execute (threads, processes, distributed).
When to Choose Scheduler:
Reference Documentation: For comprehensive guidance on Dask Schedulers, refer to references/schedulers.md which includes:
Quick Example:
pythonimport dask import dask.dataframe as dd # Use threads for DataFrame (default, good for numeric) ddf = dd.read_csv('data.csv') result1 = ddf.mean().compute() # Uses threads # Use processes for Python-heavy work import dask.bag as db bag = db.read_text('logs/*.txt') result2 = bag.map(python_function).compute(scheduler='processes') # Use synchronous for debugging dask.config.set(scheduler='synchronous') result3 = problematic_computation.compute() # Can use pdb # Use distributed for monitoring and scaling from dask.distributed import Client client = Client() result4 = computation.compute() # Uses distributed with dashboard
Key Points:
For comprehensive performance optimization guidance, memory management strategies, and common pitfalls to avoid, refer to references/best-practices.md. Key principles include:
Before using Dask, explore:
1. Don't Load Data Locally Then Hand to Dask
python# Wrong: Loads all data in memory first import pandas as pd df = pd.read_csv('large.csv') ddf = dd.from_pandas(df, npartitions=10) # Correct: Let Dask handle loading import dask.dataframe as dd ddf = dd.read_csv('large.csv')
2. Avoid Repeated compute() Calls
python# Wrong: Each compute is separate for item in items: result = dask_computation(item).compute() # Correct: Single compute for all computations = [dask_computation(item) for item in items] results = dask.compute(*computations)
3. Don't Build Excessively Large Task Graphs
map_partitions/map_blocks to fuse operationslen(ddf.__dask_graph__())4. Choose Appropriate Chunk Sizes
5. Use the Dashboard
pythonfrom dask.distributed import Client client = Client() print(client.dashboard_link) # Monitor performance, identify bottlenecks
pythonimport dask.dataframe as dd # Extract: Read data ddf = dd.read_csv('raw_data/*.csv') # Transform: Clean and process ddf = ddf[ddf['status'] == 'valid'] ddf['amount'] = ddf['amount'].astype('float64') ddf = ddf.dropna(subset=['important_col']) # Load: Aggregate and save summary = ddf.groupby('category').agg({'amount': ['sum', 'mean']}) summary.to_parquet('output/summary.parquet')
pythonimport dask.bag as db import json # Start with Bag for unstructured data bag = db.read_text('logs/*.json').map(json.loads) bag = bag.filter(lambda x: x['status'] == 'valid') # Convert to DataFrame for structured analysis ddf = bag.to_dataframe() result = ddf.groupby('category').mean().compute()
pythonimport dask.array as da # Load or create large array x = da.from_zarr('large_dataset.zarr') # Process in chunks normalized = (x - x.mean()) / x.std() # Save result (use mode= for overwrite; zarr_array_kwargs for compression) da.to_zarr(normalized, 'normalized.zarr', mode='w')
pythonfrom dask.distributed import Client client = Client() # Scatter large dataset once data = client.scatter(large_dataset) # Process in parallel with dependencies futures = [] for param in parameters: future = client.submit(process, data, param) futures.append(future) # Gather results results = client.gather(futures)
Use this decision guide to choose the appropriate Dask component:
Data Type:
Operation Type:
Control Level:
Workflow Type:
python# Bag → DataFrame ddf = bag.to_dataframe() # DataFrame → Array (for numeric data) arr = ddf.to_dask_array(lengths=True) # Array → DataFrame ddf = dd.from_dask_array(arr, columns=['col1', 'col2'])
pythondask.config.set(scheduler='synchronous') result = computation.compute() # Can use pdb, easy debugging
pythonsample = ddf.head(1000) # Small sample # Test logic, then scale to full dataset
pythonfrom dask.distributed import Client client = Client() print(client.dashboard_link) # Monitor performance result = computation.compute()
Memory Errors:
persist() strategically and delete when doneSlow Start:
map_partitions or map_blocks to reduce tasksPoor Parallelization:
All reference documentation files can be read as needed for detailed information:
references/dataframes.md - Complete Dask DataFrame guidereferences/arrays.md - Complete Dask Array guidereferences/bags.md - Complete Dask Bag guidereferences/futures.md - Complete Dask Futures and distributed computing guidereferences/schedulers.md - Complete scheduler selection and configuration guidereferences/best-practices.md - Comprehensive performance optimization and troubleshootingLoad these files when users need detailed information about specific Dask components, operations, or patterns beyond the quick guidance provided here.
Other measured skills in the registry, with their headline benchmark lift.