用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/arm2arm/AstroAgentAssistant --skill memory-bounded-parquet-analysis命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
S3/MinIO operations: connectivity, transfers, read benchmarks, and matplotlib visualization templates.
Complete guide to the REANA reproducible analytics platform: Dockerized client setup, multi-backend profiles, workflow authoring patterns, S3 dataset workflows, and best practices. Covers dev/prod backends, serial workflows, REANA_WORKSPACE usage, and self-learning from finished workflows.
Complete guide to working with Arepo simulation HDF5 files: structure inspection, unit conversion, radial profiles, slice projections, and dimensionality reduction (UMAP/t-SNE) for clustering analysis.
正在显示 SKILL.md
| name | memory-bounded-parquet-analysis |
| title | Memory-bounded Dask/Parquet analysis and plotting |
| description | Use Dask for large Parquet data safely. |
| version | 1.0.0 |
| author | Hermes Curator |
| license | MIT |
| metadata | {"hermes":{"tags":["dask","parquet","memory","performance"],"related_skills":["data-visualization-umbrella"]}} |
| tags | ["dask","parquet","memory","performance","plotting"] |
Use for large astronomy or scientific catalogs where loading the full table into pandas is unsafe, especially when a plotting suite materializes one selected column subset at a time.
len(ddf) merely to report row count.dd.read_parquet(..., columns=needed, engine="pyarrow", split_row_groups=True, blocksize=...) for the current plot. Do not build an all-column graph and slice it later.persist() unless the working set is explicitly bounded and the reuse is demonstrated.For the 50M-row joined SH26 catalog, the stable reference configuration was 2 workers × 6 threads × 7 GB (14 GB total) with 32 MB Parquet partitions. This completed a 2-column comparison plot and a 4-column Galactic derived plot without worker death. A 3 × 4.5 GB layout restarted workers on the wider plot because decompression and transformation overhead exceeded the worker limit.
This is a validation example, not a universal machine setting: re-measure on the target host and dataset.
Expose compact controls such as:
plots --all --data DATASET --memory 14GB --threads 12
Define --memory as total budget in help text. Record dataset path, quality-cut mode, memory budget, selected columns, derived quantities, and Git revision in per-plot provenance sidecars.
For catalogs too big to materialize even one plot's columns at full scale, binned plot families (2D/1D histograms, sky maps, binned mean/std) should be computed per partition on the workers and combined by a single addition — raw rows never cross to the client, only the small binned table does. Pattern (validated in SH26 v0.2.0, src/sh26/aggregate.py):
np.histogram2d result, per-bin [n, sum, sumsq]).sum([delayed(part_fn)(p, ...) for p in ddf.to_delayed()]).compute() — exact for integer counts because binning is a per-point decision and the combine is pure addition.[lo, hi), rightmost edge inclusive) so results equal np.histogram* on the materialized frame to the last count; test against that reference.int bin specs with two cheap dask min()/max() reduces on the scheduler, never by pulling rows.(l, sin b) pixel grid has exactly equal solid angle per pixel (dΩ = cos b dl db = dl d(sin b)) — a dependency-free fallback for Mollweide-style maps.client= injection seam to the loader so tests/demos can run the same code path with zero cluster processes (see pytest deadlock pitfall above).dask-expr API drift breaks code at RUNTIME in untested branches (hit 2026-08-25): this dask build (2026.x, dask-expr enabled) removed Series.notna() — use Series.notnull(). It only raised AttributeError in the dist_cut code path that no test exercised; the test suite was fully green. Verify new code paths in branches tests don't cover (conditional flags like dist cuts) with a one-off script against the fixture, and grep new code for notna after dask upgrades.
Worker memory_limit is not a guarantee against OS-level memory pressure; oversized decompressed partitions can still kill workers.
Smaller Parquet block size improves safety but may increase scheduler and metadata overhead; validate runtime on the actual suite.
A schema read from only the first part can miss columns in heterogeneous datasets; union metadata across parts.
A loader that silently drops missing columns can hide broken plot specifications. Prefer explicit per-plot missing-column handling or a documented skip guard.
Global science cuts in the loader can silently change figure semantics. Keep cuts explicit and opt-in unless the analysis contract requires them.
pytest + dask.distributed LocalCluster deadlocks (hit 2026-08-25, SH26 test suite): several LocalCluster instances (one per session-scoped fixture or per test) inside ONE pytest process hang the whole run — every file and every pair of files passes in ~4 s in isolation, but the combined run stalls for 10+ min. Nanny worker-subprocess clusters fail with "Nanny failed to start worker process"; in-process (processes=False) shared clusters still hang. Robust fix for small-fixture tests: don't spawn any cluster at all — add a client= injection seam to the loader (a marker object makes compute() fall back to dask's threads scheduler via dask.config.set({"scheduler": "threads"}), restored in the fixture teardown; the loader's close() must never close a client it doesn't own). Scheduler choice is irrelevant to what the tests verify (pushdown, masks, derived columns, dtypes) at 2000-row scale. Also: pdf.memory_usage(deep=True) in a hot path is minutes-to-hours on 402M-row object-dtype columns — estimate from dtypes (itemsize × len, constant factor for object) instead.
See references/sh26_dask_review_2026-08.md for the SH26 failure signature, configuration comparison, and verification checklist. See references/agent_stage_verification_2026-08.md for the post-stage verification checklist to run after any coding-agent stage (claimed-but-missing deletions, untested branches with dead APIs, recomputing self-reported counts).