From 06c64ae8af8f1b800374c86e4619e34037ed01de Mon Sep 17 00:00:00 2001 From: Goutam Date: Thu, 23 Jul 2026 22:58:01 -0700 Subject: [PATCH 001/135] [Data] Footer-based row-group chunking + online bin packing for Parquet V2 Replace the blind, size-based ParquetFileChunker + RoundRobinPartitioner path for Parquet V2 reads with a FooterFileIndexer that reads each file's Parquet footer on a pool of FooterReader actors (SPREAD across the cluster) and packs row groups into read units with an online, locality-preserving bin packer. This makes read units row-group-accurate instead of size-estimated, and adds predicate pushdown + row-group skipping and limit pushdown into listing: the optimizer rules mirror the pushed predicate/projection/limit from the ReadFiles scanner onto the upstream ListFiles (sync_list_files_pushdown), so the footer actors prune row groups by statistics, size only projected columns, and stop listing early under a limit. Optional row-group coalescing + split-packing are supported and gated (no-op by default). The footer indexer reuses the generic FileIndexer abstraction (ListFiles drives it via the ordinary list_files transform, yields_read_units=True so it lists in a single task and skips the partitioner). The blind ParquetFileChunker / ParquetFileChunkMetadata and their size-based row-group range helpers are removed; the reader now reads exactly the row groups a bin names. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Goutam --- .../datasource_v2/chunkers/file_chunker.py | 83 +----- .../chunkers/parquet_file_chunking_utils.py | 133 ++------- .../chunkers/parquet_footer_types.py | 72 +++++ .../datasource_v2/listing/file_indexer.py | 120 +++++++- .../listing/footer_file_indexer.py | 210 +++++++++++++ .../datasource_v2/listing/footer_reader.py | 262 +++++++++++++++++ .../datasource_v2/listing/listing_utils.py | 65 ++-- .../datasource_v2/logical_optimizers.py | 55 ++++ .../datasource_v2/parquet_datasource_v2.py | 32 +- .../partitioners/online_bin_packer.py | 277 ++++++++++++++++++ .../readers/parquet_file_reader.py | 33 ++- .../tests/test_footer_chunking.py | 249 ++++++++++++++++ .../tests/test_parquet_datasource_v2.py | 228 +++----------- .../logical/operators/read_operator.py | 10 + .../_internal/logical/rules/limit_pushdown.py | 9 +- .../logical/rules/predicate_pushdown.py | 25 ++ .../logical/rules/projection_pushdown.py | 8 + .../_internal/planner/plan_list_files_op.py | 19 +- python/ray/data/read_api.py | 16 +- .../tests/datasource/test_read_parquet_v2.py | 16 +- .../unit/datasource_v2/test_file_chunker.py | 76 +---- .../unit/datasource_v2/test_file_indexer.py | 26 +- 22 files changed, 1473 insertions(+), 551 deletions(-) create mode 100644 python/ray/data/_internal/datasource_v2/chunkers/parquet_footer_types.py create mode 100644 python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py create mode 100644 python/ray/data/_internal/datasource_v2/listing/footer_reader.py create mode 100644 python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py create mode 100644 python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py diff --git a/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py b/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py index 0f8e504965c0..0b7933d76ed7 100644 --- a/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py +++ b/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py @@ -19,7 +19,7 @@ get_type_hints, ) -from ray.data._internal.util import GiB, MiB, infer_compression +from ray.data._internal.util import MiB, infer_compression from ray.util.annotations import DeveloperAPI @@ -54,16 +54,22 @@ class LineDelimitedFileChunkMetadata(ChunkMetadata): chunk_byte_end_idx: int -class ParquetFileChunkMetadata(ChunkMetadata): - """Metadata for Parquet file chunks. +class ParquetRowGroupChunkMetadata(ChunkMetadata): + """Metadata for a Parquet chunk described by explicit row-group indices. - For a parquet file, the chunks are based on the total size of the file, not on the - underlying row groups. We will split a file into potentially many chunks of the - target chunk size. This may correspond to 0, 1, or more row groups per chunk. + Produced by the footer-based chunking path (``ListFiles`` reads each file's + footer, prunes/bin-packs its row groups, and emits one manifest row per file + per bin), so it carries the exact physical row groups the reader should scan + for the file in that bin -- no size-based reconciliation needed. + + ``row_group_ids`` are physical row-group indices into the file; any + coalescing/splitting the bin packer applied is already expanded away here. + ``num_rows`` is the summed footer row count of those groups (for sizing / + limit accounting). """ - chunk_idx: int - total_num_chunks: int + row_group_ids: Tuple[int, ...] + num_rows: int @DeveloperAPI @@ -146,64 +152,3 @@ def generate_chunk_metadatas( ), chunk_size, ) - - -@DeveloperAPI -class ParquetFileChunker(FileChunker): - """File chunker for Parquet files. - - This chunker splits Parquet files into an estimated number of chunks. We do not - fetch the metadata for the file, so we may overestimate the number of chunks - compared to the actual number of underlying row groups. The partitioner creates - groupings based on these estimates, and the reader fetches the metadata and - ensures that all row groups are read / any overestimated row groups are ignored. - """ - - # Chosen so that we can effectively chunk files but will not result in OOMs if - # the compression ratio is high. - # - # If the compression ratio is high and this chunk size is large, we end up with - # larger chunks than we need and reading can OOM. Reducing the chunk size gives - # better memory performance by reading a smaller fraction of row groups at a time. - # - # We also want to keep this large enough such that we do not end up reading too - # much data if we underestimate the number of chunks. If row groups are larger - # than the chunk size and we place many of them in the same read task, the total - # amount of data read might be larger than expected. By increasing the chunk - # size we are less likely to put many such row groups in the same task. - _DEFAULT_TARGET_CHUNK_SIZE = 1 * GiB - - def __init__(self, target_chunk_size: Optional[int] = None): - from ray.data.context import DataContext - - ctx = DataContext.get_current() - if target_chunk_size is not None: - self._target_chunk_size = target_chunk_size - elif ctx.parquet_chunker_target_chunk_size is not None: - self._target_chunk_size = ctx.parquet_chunker_target_chunk_size - else: - self._target_chunk_size = self._DEFAULT_TARGET_CHUNK_SIZE - - def generate_chunk_metadatas( - self, path: str, file_size: int - ) -> Iterable[Tuple[Optional[ChunkMetadata], int]]: - if file_size <= self._target_chunk_size: - # Do not chunk if the file is smaller than the target chunk size; when - # we read the file, this prevents additional metadata fetching since we - # want to read the entire file. - yield None, file_size - return - - num_chunks = math.ceil(file_size / self._target_chunk_size) - for i in range(num_chunks): - chunk_start = self._target_chunk_size * i - chunk_end = min(self._target_chunk_size * (i + 1), file_size) - chunk_size = chunk_end - chunk_start - yield ( - create_chunk_metadata( - ParquetFileChunkMetadata, - chunk_idx=i, - total_num_chunks=num_chunks, - ), - chunk_size, - ) diff --git a/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py b/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py index 2ae89d926c3a..a5cc2b06972e 100644 --- a/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py +++ b/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py @@ -1,113 +1,42 @@ -"""Parquet file-level chunking helpers for DataSourceV2. +"""Parquet chunk helpers for DataSourceV2. -Maps planner chunk metadata (``ParquetFileChunkMetadata``) to row-group -ranges and PyArrow ``ParquetFileFragment`` subsets for parallel reads. +Maps ``ParquetRowGroupChunkMetadata`` (the explicit surviving row groups a bin +assigns to a file) to PyArrow ``ParquetFileFragment`` subsets for reading. """ -from typing import List, Optional, Tuple +from typing import Iterable, List, Tuple import pyarrow.dataset as pds -from ray.data._internal.datasource_v2.chunkers.file_chunker import ( - ParquetFileChunkMetadata, -) - -def _calculate_row_group_range( - chunk_idx: int, total_num_chunks: int, total_row_groups: int -) -> Optional[Tuple[int, int]]: - """Compute the half-open row-group range for a given chunk. - - Distributes row groups as evenly as possible across chunks. If row groups - don't divide evenly, earlier chunks get the extra row groups. - - Example: - - 10 row groups, 3 chunks -> [0:4), [4:7), [7:10) - - 11 row groups, 3 chunks -> [0:4), [4:8), [8:11) - - Args: - chunk_idx: Index of the current chunk (0-based). - total_num_chunks: Total number of chunks. - total_row_groups: Total number of row groups to distribute. - - Returns: - Tuple ``(start_row_group, end_row_group)`` where ``end`` is exclusive, - or ``None`` if ``chunk_idx`` falls beyond the actual number of row - groups (i.e. the planner over-estimated the chunk count). - """ - assert ( - total_row_groups >= 0 - ), f"total_row_groups must be non-negative, got {total_row_groups}" - assert ( - total_num_chunks > 0 - ), f"total_num_chunks must be positive, got {total_num_chunks}" - assert ( - chunk_idx < total_num_chunks - ), f"chunk_idx must be less than total_num_chunks, got {chunk_idx} and {total_num_chunks}" - assert chunk_idx >= 0, f"chunk_idx must be non-negative, got {chunk_idx}" - - # Handle the case where ``chunk_idx`` exceeds the actual number of chunks - # needed. This happens when the planner overestimated the number of chunks - # (the chunker doesn't fetch metadata). - if chunk_idx >= total_row_groups: - return None - - base_row_groups_per_chunk = total_row_groups // total_num_chunks - remainder = total_row_groups % total_num_chunks - - # Chunks 0 through (remainder-1) get one extra row group. - if chunk_idx < remainder: - row_groups_in_this_chunk = base_row_groups_per_chunk + 1 - start = chunk_idx * row_groups_in_this_chunk - else: - row_groups_in_this_chunk = base_row_groups_per_chunk - start = ( - remainder * (base_row_groups_per_chunk + 1) - + (chunk_idx - remainder) * base_row_groups_per_chunk - ) - - end = start + row_groups_in_this_chunk - - assert ( - 0 <= start <= end <= total_row_groups - ), f"Invalid range [{start}, {end}) for {total_row_groups} row groups" - - return start, end - - -def _fragments_from_chunk_metadata( +def _fragments_from_row_group_ids( fragment: pds.ParquetFileFragment, - chunk_metadata: ParquetFileChunkMetadata, + row_group_ids: Iterable[int], + *, + per_row_group_offsets: bool, ) -> List[Tuple[pds.ParquetFileFragment, int]]: - """Slice ``fragment`` into per-row-group sub-fragments per chunk metadata. - - Returns one ``(ParquetFileFragment, file_row_offset)`` pair per row group - covered by the chunk, where ``file_row_offset`` is the sum of ``num_rows`` - across all row groups that precede the sub-fragment in the underlying - file. Callers seed per-fragment hashing offsets with this value so - sub-fragments of the same file don't collide on ``(path, 0, n)``. - - Returns an empty list when the chunk index falls beyond the file's actual - row-group count (the planner over-estimated; we silently drop the slice). + """Slice ``fragment`` to the explicit physical ``row_group_ids`` of one bin. + + Used by the footer-based chunking path, where ``ParquetRowGroupChunkMetadata`` + names the exact surviving row groups for a file (predicate pruning + bin + packing already happened upstream), so no size-based reconciliation is needed. + + When ``per_row_group_offsets`` is False (the common case) the file's groups + are scanned together as a single sub-fragment with a row offset of 0 -- this + lets PyArrow coalesce reads across the groups. When True (``include_row_hash`` + is on), one sub-fragment per row group is returned, each paired with its + cumulative pre-filter row offset within the file, so row hashes stay unique + and match the physical row positions even when pruned groups make the + surviving set non-contiguous. """ - chunk_idx = chunk_metadata["chunk_idx"] - total_num_chunks = chunk_metadata["total_num_chunks"] - metadata = fragment.metadata - total_row_groups = metadata.num_row_groups - - row_group_range = _calculate_row_group_range( - chunk_idx, total_num_chunks, total_row_groups - ) - - if row_group_range is None: + ids = sorted(row_group_ids) + if not ids: return [] + if not per_row_group_offsets: + return [(fragment.subset(row_group_ids=ids), 0)] - start, end = row_group_range - - file_row_offset = sum(metadata.row_group(i).num_rows for i in range(start)) - sub_fragments: List[Tuple[pds.ParquetFileFragment, int]] = [] - for row_group_index in range(start, end): - sub_fragments.append( - (fragment.subset(row_group_ids=[row_group_index]), file_row_offset) - ) - file_row_offset += metadata.row_group(row_group_index).num_rows - return sub_fragments + metadata = fragment.metadata + # Cumulative pre-filter row offset at the start of each physical row group. + prefix = [0] * (metadata.num_row_groups + 1) + for i in range(metadata.num_row_groups): + prefix[i + 1] = prefix[i] + metadata.row_group(i).num_rows + return [(fragment.subset(row_group_ids=[rg_id]), prefix[rg_id]) for rg_id in ids] diff --git a/python/ray/data/_internal/datasource_v2/chunkers/parquet_footer_types.py b/python/ray/data/_internal/datasource_v2/chunkers/parquet_footer_types.py new file mode 100644 index 000000000000..13c00dc4b999 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/chunkers/parquet_footer_types.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import Tuple + + +@dataclass(frozen=True) +class RowGroupInfo: + """A chunk of one file: a contiguous run of ``rg_count`` physical row groups. + + ``uncompressed_size`` / ``num_rows`` are summed over the run. For a single + physical row group (``rg_count == 1``) the run is its own atom and needs no + breakdown, so ``rg_sizes`` / ``rg_rows`` stay empty; they're populated only + for coalesced runs (``rg_count > 1``) so the bin packer can split them back + at exact byte/row boundaries. + """ + + # Start row-group index (== the row group's index when rg_count == 1). + rg_idx: int + uncompressed_size: int # summed over the run + num_rows: int # summed over the run + # True when every row in the run is guaranteed to satisfy the filter (or there + # is no filter), so ``num_rows`` is an exact survivor count and the limit can + # be pushed down on it. False for partially-matching groups, whose ``num_rows`` + # overestimates survivors. Coalescing never merges across this flag. + fully_matched: bool = True + # Number of consecutive physical row groups this chunk covers. + rg_count: int = 1 + # Per-physical-row-group uncompressed sizes / row counts, in ``rg_idx`` order. + # Populated only for coalesced runs (``rg_count > 1``). + rg_sizes: Tuple[int, ...] = () + rg_rows: Tuple[int, ...] = () + + +@dataclass(frozen=True) +class FileChunks: + """The footer-derived chunks for a single file.""" + + path: str + size: int # on-disk file size, from the file listing + row_groups: Tuple[RowGroupInfo, ...] + + +@dataclass(frozen=True) +class BinItem: + """One file's row-group chunk placed into a bin. + + Same contiguous-run shape as :class:`RowGroupInfo`; ``path`` is the packer's + "colour". A (possibly-split) item covers physical row groups + ``range(rg_idx, rg_idx + rg_count)``. + """ + + path: str # colour + rg_idx: int # start row-group index (see RowGroupInfo.rg_idx) + uncompressed_size: int + num_rows: int + fully_matched: bool = True # see RowGroupInfo.fully_matched + rg_count: int = 1 # number of consecutive physical row groups this item covers + # Per-physical-row-group breakdown (rg_idx order), populated only for + # coalesced runs (rg_count > 1); lets the packer split at row-group boundaries. + rg_sizes: Tuple[int, ...] = () + rg_rows: Tuple[int, ...] = () + + +@dataclass(frozen=True) +class Bin: + """A sealed bin: a set of row-group chunks (across one or more files) whose + combined uncompressed size targets one bin budget. Becomes one + ``FileManifest`` block == one downstream read task.""" + + items: Tuple[BinItem, ...] + total_uncompressed_size: int diff --git a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py index 66cea801ce6c..b22e7d42d76b 100644 --- a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py @@ -1,7 +1,7 @@ import logging from abc import ABC, abstractmethod from dataclasses import dataclass -from typing import Callable, Iterable, List, Optional, Tuple, Union +from typing import TYPE_CHECKING, Callable, Iterable, List, Optional, Tuple, Union from pyarrow.fs import FileSystem @@ -21,6 +21,9 @@ from ray.data.block import BlockColumn from ray.data.datasource.path_util import _resolve_paths_and_filesystem +if TYPE_CHECKING: + from ray.data.expressions import Expr + logger = logging.getLogger(__name__) @@ -31,6 +34,19 @@ def file_chunker(self) -> FileChunker: """The file chunker that this indexer uses.""" ... + @property + def yields_read_units(self) -> bool: + """Whether ``list_files`` already emits complete read units. + + ``False`` (default) means the indexer yields per-file / per-chunk + manifests that still need size-balanced partitioning downstream. An + indexer that bin-packs internally (e.g. the footer-based Parquet indexer, + which reads footers and packs row groups into ~one-block manifests) + returns ``True``; ``ListFiles`` then skips the partitioner and runs + listing as a single task so packing sees the whole file stream. + """ + return False + @abstractmethod def list_files( self, @@ -39,6 +55,9 @@ def list_files( filesystem: "FileSystem", pruners: Optional[List[FilePruner]] = None, preserve_order: bool = False, + predicate: Optional["Expr"] = None, + limit: Optional[int] = None, + projected_columns: Optional[List[str]] = None, ) -> Iterable[FileManifest]: """List files and their on-disk sizes for the given path. @@ -47,6 +66,13 @@ def list_files( filesystem: A PyArrow filesystem object. pruners: A list of file pruners to apply. preserve_order: Whether to preserve order in file listing. + predicate: Pushed-down row filter. Indexers that read file + metadata (e.g. the footer-based Parquet indexer) use it to skip + row groups; others ignore it. + limit: Pushed-down row limit, for indexers that can stop listing + early. Others ignore it. + projected_columns: Pushed-down column projection, for metadata-aware + sizing. Others ignore it. Returns: An iterator of `FileManifest` objects, each of which contains a file path @@ -54,6 +80,24 @@ def list_files( """ ... + @abstractmethod + def list_file_infos( + self, + paths: "BlockColumn", + *, + filesystem: "FileSystem", + pruners: Optional[List[FilePruner]] = None, + preserve_order: bool = False, + ) -> Iterable["FileInfo"]: + """List files as raw ``FileInfo``\\ s (path + on-disk size). + + Unlike :meth:`list_files`, this yields the pre-chunk file stream. The + footer-based Parquet path consumes it directly -- it reads each file's + footer and bin-packs row groups itself, so it needs paths + sizes rather + than pre-chunked manifest rows. + """ + ... + @dataclass(frozen=True) class FileInfo: @@ -146,16 +190,35 @@ def list_files( filesystem: "FileSystem", pruners: Optional[List[FilePruner]] = None, preserve_order: bool = False, + predicate: Optional["Expr"] = None, + limit: Optional[int] = None, + projected_columns: Optional[List[str]] = None, ) -> Iterable[FileManifest]: - file_info_iterator = ( - self._get_file_info_iterator_threaded(paths, filesystem, preserve_order) - if self._num_workers > 1 - else self._get_file_info_iterator_sequential(paths, filesystem) + # This per-file listing path ignores predicate/limit/projected_columns; + # they're consumed by metadata-aware indexers (e.g. the footer indexer). + # ``list_file_infos`` already skips zero-size files and applies pruners, + # so the manifest builder only has to chunk. + file_infos = self.list_file_infos( + paths, + filesystem=filesystem, + pruners=pruners, + preserve_order=preserve_order, ) + yield from self._process_file_infos_to_manifests(file_infos) - yield from self._process_file_infos_to_manifests( - file_info_iterator, pruners or [] - ) + def _get_file_info_iterator( + self, + paths: "BlockColumn", + filesystem: "FileSystem", + preserve_order: bool, + ) -> Iterable[FileInfo]: + """Threaded (work-stealing) traversal when ``num_workers > 1``, else + sequential. Shared by :meth:`list_files` and :meth:`list_file_infos`.""" + if self._num_workers > 1: + return self._get_file_info_iterator_threaded( + paths, filesystem, preserve_order + ) + return self._get_file_info_iterator_sequential(paths, filesystem) def _get_file_info_iterator_sequential( self, @@ -262,11 +325,41 @@ def _ordered_result_key(result: OrderedFileResult) -> Tuple[int, str]: num_workers=num_workers, ) + def list_file_infos( + self, + paths: "BlockColumn", + *, + filesystem: "FileSystem", + pruners: Optional[List[FilePruner]] = None, + preserve_order: bool = False, + ) -> Iterable[FileInfo]: + """Yield pruned, non-empty ``FileInfo``\\ s (path + on-disk size). + + The raw file-info stream that :meth:`list_files` chunks into manifests. + The footer-based Parquet path consumes this directly -- it reads each + file's footer and bin-packs row groups itself, so it needs paths + sizes + rather than pre-chunked manifest rows. Zero-size files are skipped and + ``pruners`` (file-extension / partition filters) are applied here, so + both listing paths share one filtering point. + """ + pruners = pruners or [] + file_info_iterator = self._get_file_info_iterator( + paths, filesystem, preserve_order + ) + for file_info in file_info_iterator: + if file_info.size is None or file_info.size == 0: + logger.warning(f"Skipping zero-size file: {file_info.path!r}") + continue + if not all(pruner.should_include(file_info.path) for pruner in pruners): + continue + yield file_info + def _process_file_infos_to_manifests( self, file_infos: Iterable[FileInfo], - pruners: List[FilePruner], ) -> Iterable[FileManifest]: + # ``file_infos`` are already filtered (zero-size skipped, pruners applied) + # by ``list_file_infos``; this method only chunks them into manifests. running_paths: List[str] = [] running_file_sizes: List[int] = [] running_chunk_metadatas: List[Optional[ChunkMetadata]] = [] @@ -274,15 +367,10 @@ def _process_file_infos_to_manifests( chunks_count = 0 for file_info in file_infos: + # ``list_file_infos`` already dropped zero/None-size files. + assert file_info.size is not None path, file_size = file_info.path, file_info.size - if file_size is None or file_size == 0: - logger.warning(f"Skipping zero-size file: {path!r}") - continue - - if not all(pruner.should_include(path) for pruner in pruners): - continue - # Drive the chunker once per file; emit one manifest row per chunk. # ``chunk_metadata`` is ``None`` for whole-file chunks (default # ``WholeFileChunker`` behavior and ``ParquetFileChunker`` for files diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py new file mode 100644 index 000000000000..e46cf9cd0b2b --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py @@ -0,0 +1,210 @@ +from __future__ import annotations + +import logging +from collections import deque +from typing import TYPE_CHECKING, Deque, Iterable, Iterator, List, Optional, Tuple + +import ray +from ray._common.utils import env_integer +from ray.data._internal.datasource_v2.listing.file_indexer import ( + NonSamplingFileIndexer, +) +from ray.data._internal.datasource_v2.listing.file_manifest import FileManifest +from ray.data._internal.datasource_v2.listing.footer_reader import FooterReaderActor +from ray.data._internal.datasource_v2.partitioners.online_bin_packer import ( + OnlineBinPacker, +) +from ray.data._internal.util import GiB + +if TYPE_CHECKING: + from pyarrow.fs import FileSystem + + from ray.actor import ActorProxy + from ray.data._internal.datasource_v2.listing.file_indexer import FileInfo + from ray.data._internal.datasource_v2.listing.file_pruners import FilePruner + from ray.data._internal.datasource_v2.listing.footer_reader import FooterReader + from ray.data.block import BlockColumn + from ray.data.expressions import Expr + +logger = logging.getLogger(__name__) + +# A pool of footer-reading actors spread across the cluster. Footer reads are +# network-bound, so several actors each driving many concurrent reads keeps IO +# from bottlenecking on a single node. +_DEFAULT_NUM_ACTORS = env_integer("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", 32) +_DEFAULT_IO_CONCURRENCY = env_integer("RAY_DATA_PARQUET_FOOTER_IO_CONCURRENCY", 128) +# Files per ``read_footers`` call. Small footers -> batch several per task to +# amortize the per-task and per-result object-store overhead. +_DEFAULT_BATCH_SIZE = env_integer("RAY_DATA_PARQUET_FOOTER_BATCH_SIZE", 10) +# Fallback bin budget (uncompressed bytes per read task) when +# ``target_max_block_size`` is unset. +_DEFAULT_BIN_BYTES = env_integer("RAY_DATA_PARQUET_FOOTER_BIN_BYTES", 1 * GiB) + + +class FooterFileIndexer(NonSamplingFileIndexer): + """Lists files, then footer-reads + bin-packs their row groups into manifests. + + Inherits directory traversal and ``list_file_infos`` from + :class:`NonSamplingFileIndexer`; overrides :meth:`list_files` to emit + bin-packed read units instead of per-file chunks. + """ + + def __init__( + self, + *, + ignore_missing_paths: bool, + num_workers: Optional[int] = None, + max_paths_per_output: Optional[int] = None, + coalesce_bytes: int = 0, + split_coalesced: bool = False, + num_actors: Optional[int] = None, + io_concurrency: Optional[int] = None, + footer_batch_size: Optional[int] = None, + max_shared_open_bins: int = 16, + ): + super().__init__( + ignore_missing_paths=ignore_missing_paths, + num_workers=num_workers, + max_paths_per_output=max_paths_per_output, + ) + self._coalesce_bytes = coalesce_bytes + self._split_coalesced = split_coalesced + self._num_actors = num_actors if num_actors is not None else _DEFAULT_NUM_ACTORS + self._io_concurrency = ( + io_concurrency if io_concurrency is not None else _DEFAULT_IO_CONCURRENCY + ) + self._footer_batch_size = ( + footer_batch_size if footer_batch_size is not None else _DEFAULT_BATCH_SIZE + ) + self._max_shared_open_bins = max_shared_open_bins + + @property + def yields_read_units(self) -> bool: + # list_files already emits bin-packed read units, so ListFiles skips the + # partitioner and lists in a single task (global packing + one pool). + return True + + def list_files( + self, + paths: "BlockColumn", + *, + filesystem: "FileSystem", + pruners: Optional[List["FilePruner"]] = None, + preserve_order: bool = False, + predicate: Optional["Expr"] = None, + limit: Optional[int] = None, + projected_columns: Optional[List[str]] = None, + ) -> Iterable[FileManifest]: + from ray.data.context import DataContext + + max_bin_bytes = ( + DataContext.get_current().target_max_block_size or _DEFAULT_BIN_BYTES + ) + file_infos = self.list_file_infos( + paths, + filesystem=filesystem, + pruners=pruners, + preserve_order=preserve_order, + ) + actors: List[ActorProxy[FooterReader]] = [ + FooterReaderActor.options(scheduling_strategy="SPREAD").remote( + filesystem, + self._io_concurrency, + predicate, + projected_columns, + self._coalesce_bytes, + ) + for _ in range(self._num_actors) + ] + logger.debug( + "Provisioned %d FooterReader actors (io_concurrency=%d)", + self._num_actors, + self._io_concurrency, + ) + try: + yield from self._read_and_pack(actors, file_infos, max_bin_bytes, limit) + finally: + for actor in actors: + ray.kill(actor) + + def _read_and_pack( + self, + actors: List["ActorProxy[FooterReader]"], + file_infos: "Iterable[FileInfo]", + max_bin_bytes: int, + limit: Optional[int], + ) -> Iterator[FileManifest]: + packer = OnlineBinPacker( + max_bin_bytes, + max_shared_open_bins=self._max_shared_open_bins, + split_coalesced=self._split_coalesced, + ) + # Bound the number of in-flight footer batches so listing stays roughly + # demand-driven (matters under a limit) and memory stays flat. + window = max(1, self._num_actors * 2) + batches = self._batches(file_infos) + # FIFO of in-flight streaming generators, one per dispatched footer batch. + pending: Deque[ray.ObjectRefGenerator] = deque() + batch_no = 0 + delivered_fully_matched_rows = 0 + + def dispatch_next() -> bool: + nonlocal batch_no + batch = next(batches, None) + if batch is None: + return False + actor: ActorProxy[FooterReader] = actors[batch_no % len(actors)] + gen: ray.ObjectRefGenerator = actor.read_footers.options( + num_returns="streaming" + ).remote(batch) + pending.append(gen) + batch_no += 1 + return True + + # Prime the window. + for _ in range(window): + if not dispatch_next(): + break + + while pending: + gen = pending.popleft() + for ref in gen: # blocks until this generator's next result lands + for file_chunks in ray.get(ref): + packer.add_file_chunks(file_chunks) + if limit is not None: + # Count only fully-matched (exact-survivor) rows so + # stopping can never under-deliver under a filter. + delivered_fully_matched_rows += sum( + rg.num_rows + for rg in file_chunks.row_groups + if rg.fully_matched + ) + while packer.has_partition(): + yield packer.next_partition() + if limit is not None and delivered_fully_matched_rows >= limit: + # Flush open bins so a small limit yields promptly; abandon + # in-flight generators (the actor teardown cancels them). + packer.finalize() + while packer.has_partition(): + yield packer.next_partition() + return + # This generator drained; keep the window full. + dispatch_next() + + packer.finalize() + while packer.has_partition(): + yield packer.next_partition() + + def _batches( + self, file_infos: "Iterable[FileInfo]" + ) -> Iterator[List[Tuple[str, int]]]: + batch: List[Tuple[str, int]] = [] + for file_info in file_infos: + if file_info.size is None: + continue + batch.append((file_info.path, file_info.size)) + if len(batch) >= self._footer_batch_size: + yield batch + batch = [] + if batch: + yield batch diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py new file mode 100644 index 000000000000..36a5479a8c29 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py @@ -0,0 +1,262 @@ +"""``FooterReader`` Ray actor for the footer-based Parquet chunking path. + +Reads Parquet footers on a pool of actors (spread across the cluster) and turns +each file into a small :class:`FileChunks` descriptor of its row groups, applying +predicate-based row-group pruning and projection-aware byte accounting close to +the footer read. Reading *and* chunking happen in the same place so the large +``FileMetaData`` (tens of KB to several MB) never crosses a process boundary -- +only the tiny ``FileChunks`` result is serialized back to the driver. + +Ported from the ``reader_bin_packing`` prototype +(``worktree-binpacker-split`` branch, ``list_files.py``), adapted to Ray Data: +takes a resolved PyArrow filesystem (instead of an S3 region), uses stdlib +logging, and exposes ``read_footers`` as a plain synchronous streaming generator +(IO concurrency comes from an internal thread pool, not asyncio). +""" + +from __future__ import annotations + +import logging +from concurrent.futures import ThreadPoolExecutor, as_completed +from dataclasses import replace +from typing import TYPE_CHECKING, Iterable, Iterator, List, Optional, Set, Tuple + +import pyarrow as pa +import pyarrow.dataset as pds +import pyarrow.fs as pafs +from pyarrow.parquet import RowGroupMetaData + +import ray +from ray.data._internal.datasource_v2.chunkers.parquet_footer_types import ( + FileChunks, + RowGroupInfo, +) + +if TYPE_CHECKING: + import pyarrow.compute as pc + + from ray.data.expressions import Expr + +logger = logging.getLogger(__name__) + + +def coalesce_row_groups( + per_rg: List[RowGroupInfo], target: int +) -> Tuple[RowGroupInfo, ...]: + """Merge runs of consecutive row groups into ~``target``-byte chunks. + + A run breaks on: a change in ``fully_matched`` (never merge across the + match-class boundary, or limit push-down would miscount), a gap in the + ``rg_idx`` sequence (e.g. filter-pruned groups), or once the accumulator + reaches ``target``. A single row group larger than ``target`` forms its own + chunk. ``target == 0`` disables coalescing entirely (one chunk per physical + row group). Coalesced chunks (``rg_count > 1``) carry per-row-group + ``rg_sizes`` / ``rg_rows`` so the packer can split them back at exact + boundaries. Pure function -- unit-tested directly. + """ + if not target: + return tuple(per_rg) + out: List[RowGroupInfo] = [] + cur: Optional[RowGroupInfo] = None + cur_sizes: List[int] = [] + cur_rows: List[int] = [] + + def _flush() -> None: + if cur is None: + return + if len(cur_sizes) > 1: + out.append(replace(cur, rg_sizes=tuple(cur_sizes), rg_rows=tuple(cur_rows))) + else: + out.append(cur) + + for rg in per_rg: # ascending rg_idx; each is a single physical row group + if ( + cur is not None + and cur.fully_matched == rg.fully_matched + and cur.rg_idx + cur.rg_count == rg.rg_idx # contiguous + and cur.uncompressed_size < target # not full yet + ): + cur = replace( + cur, + rg_count=cur.rg_count + rg.rg_count, + uncompressed_size=cur.uncompressed_size + rg.uncompressed_size, + num_rows=cur.num_rows + rg.num_rows, + ) + cur_sizes.append(rg.uncompressed_size) + cur_rows.append(rg.num_rows) + else: + _flush() + cur = rg + cur_sizes = [rg.uncompressed_size] + cur_rows = [rg.num_rows] + _flush() + return tuple(out) + + +class FooterReader: + """Reads Parquet footers and chunks files into row-group runs. + + Run as a pool of Ray actors (see :data:`FooterReaderActor`) to spread footer + IO across the cluster instead of bottlenecking on the driver. ``read_footers`` + is a streaming generator that yields ``FileChunks`` in small batches as their + footers land, so the driver does far fewer object-store fetches than one per + file. + + Kept as a plain class (the actor is created via the functional + ``ray.remote(FooterReader)`` form below) so callers can type actor handles as + ``ActorProxy[FooterReader]`` -- see Ray's type-hint docs + (https://docs.ray.io/en/latest/ray-core/type-hint.html). + """ + + def __init__( + self, + filesystem: pafs.FileSystem, + io_concurrency: int = 128, + filter_expr: Optional["Expr"] = None, + projected_cols: Optional[List[str]] = None, + coalesce_bytes: int = 0, + ): + # Coalescing target: merge contiguous row groups into chunks of + # ~coalesce_bytes uncompressed before returning them, so the driver packs + # fewer items. 0 disables coalescing (one chunk per physical row group). + self.coalesce_bytes = coalesce_bytes + self.filesystem = filesystem + self.pool = ThreadPoolExecutor(max_workers=io_concurrency) + # Match Arrow's process-wide pools to the actor's IO concurrency so + # nested S3/footer work isn't bottlenecked on the default 8 threads. + pa.set_io_thread_count(io_concurrency) + pa.set_cpu_count(io_concurrency) + # Lower the Ray Data predicate to a native PyArrow compute expression once + # (per actor) so it can be pushed into split_by_row_group for row-group + # pruning. ``None`` means "no predicate" -> keep every row group. + self.filter: Optional["pc.Expression"] = ( + filter_expr.to_pyarrow() if filter_expr is not None else None + ) + # Projection pushdown: when set, row-group byte sizes are accounted over + # only these top-level columns, since the reader will only fetch those. + self.projected_cols: Optional[Set[str]] = ( + set(projected_cols) if projected_cols is not None else None + ) + # Reused across files; make_fragment is what lets us apply + # split_by_row_group. + self.file_format = pds.ParquetFileFormat() + + def _projected_leaf_indices(self, row_group) -> Optional[List[int]]: + # Map the requested top-level column names to Parquet leaf-column indices + # (a nested field expands to several leaves, e.g. "a.b.list.element"). + # Returns None to signal "all columns" so callers can take the cheap path. + if self.projected_cols is None: + return None + return [ + j + for j in range(row_group.num_columns) + if row_group.column(j).path_in_schema.split(".", 1)[0] + in self.projected_cols + ] + + def _row_group_info( + self, + row_group: RowGroupMetaData, + rg_idx: int, + leaf_indices: Optional[List[int]], + fully_matched: bool = True, + ) -> RowGroupInfo: + if leaf_indices is None: + # total_byte_size is a single cheap accessor for the whole row group, + # so we avoid walking columns entirely on the no-projection path. + uncompressed = row_group.total_byte_size + else: + # Sum only the projected leaves so bin packing reflects the bytes the + # downstream reader will actually pull for this row group. + uncompressed = sum( + row_group.column(j).total_uncompressed_size for j in leaf_indices + ) + return RowGroupInfo( + rg_idx=rg_idx, + uncompressed_size=uncompressed, + num_rows=row_group.num_rows, + fully_matched=fully_matched, + ) + + def _read_and_chunk(self, path: str, size: int) -> FileChunks: + fragment = self.file_format.make_fragment(path, filesystem=self.filesystem) + metadata = fragment.metadata # reads + caches the footer on the fragment + if self.filter is not None: + # Predicate pushdown: drop row groups whose Parquet statistics + # contradict the filter, so we never emit chunks the reader would + # skip anyway. Each returned fragment views a single surviving group. + surviving = fragment.split_by_row_group(self.filter) + rg_indices: Iterable[int] = [sub.row_groups[0].id for sub in surviving] + # Classify surviving groups as fully- vs partially-matching via + # predicate negation (a la DataFusion): a group is fully matched iff + # ~filter cannot match any of its rows, i.e. the negation prunes it + # out. For those, num_rows is an exact survivor count and can drive + # the limit push-down. Any failure defaults to "not fully matched", + # which is always safe (falls back to the post-filter stop). + try: + not_fully = { + sub.row_groups[0].id + for sub in fragment.split_by_row_group(~self.filter) + } + except Exception: + not_fully = set(rg_indices) + fully_by_idx: Optional[dict] = {i: i not in not_fully for i in rg_indices} + else: + rg_indices = range(metadata.num_row_groups) + fully_by_idx = None # no predicate -> every group is fully matched + + leaf_indices = ( + self._projected_leaf_indices(metadata.row_group(0)) + if metadata.num_row_groups + else None + ) + per_rg = [ + self._row_group_info( + metadata.row_group(i), + i, + leaf_indices, + fully_matched=(True if fully_by_idx is None else fully_by_idx[i]), + ) + for i in rg_indices + ] + # Coalesce contiguous row groups into ~coalesce_bytes chunks (no-op when + # coalesce_bytes == 0) so only a handful of descriptors per file reach the + # driver's bin-packer instead of one per physical row group. + row_groups = coalesce_row_groups(per_rg, self.coalesce_bytes) + return FileChunks(path=path, size=size, row_groups=row_groups) + + def read_footers( + self, files: List[Tuple[str, int]], *, result_batch_size: int = 1 + ) -> Iterator[List[FileChunks]]: + """Read the footers of ``files`` concurrently, yielding ``FileChunks``. + + Yields lists of ``FileChunks`` (not single results): each list the driver + receives costs one object-store fetch, so batching cuts driver-side + deserialization overhead ~``result_batch_size``-fold. Call with + ``num_returns="streaming"`` so results stream out as footers land. + """ + futures = [ + self.pool.submit(self._read_and_chunk, path, size) for path, size in files + ] + buffer: List[FileChunks] = [] + total_row_groups = 0 + for finished in as_completed(futures): + chunk = finished.result() + total_row_groups += len(chunk.row_groups) + buffer.append(chunk) + if len(buffer) >= result_batch_size: + yield buffer + buffer = [] + if buffer: + yield buffer + logger.debug( + "FooterReader batch: %d files, %d row groups", + len(files), + total_row_groups, + ) + + +# The Ray actor class. Built via the functional ``ray.remote(...)`` form (rather +# than the ``@ray.remote`` decorator) so ``FooterReader`` stays a plain class and +# actor handles can be typed ``ActorProxy[FooterReader]``. +FooterReaderActor = ray.remote(FooterReader) diff --git a/python/ray/data/_internal/datasource_v2/listing/listing_utils.py b/python/ray/data/_internal/datasource_v2/listing/listing_utils.py index 7287e59bed8b..f66c11862ea0 100644 --- a/python/ray/data/_internal/datasource_v2/listing/listing_utils.py +++ b/python/ray/data/_internal/datasource_v2/listing/listing_utils.py @@ -16,7 +16,7 @@ ) from ray.data._internal.delegating_block_builder import DelegatingBlockBuilder from ray.data._internal.execution.interfaces.task_context import TaskContext -from ray.data.block import Block, BlockAccessor +from ray.data.block import Block if TYPE_CHECKING: from pyarrow.fs import FileSystem @@ -24,6 +24,7 @@ from ray.data._internal.datasource_v2.listing.file_indexer import FileIndexer from ray.data.datasource.file_based_datasource import FileShuffleConfig from ray.data.datasource.partitioning import PathPartitionFilter + from ray.data.expressions import Expr def partition_files( @@ -62,6 +63,9 @@ def list_files_for_each_block( file_extensions: Optional[List[str]] = None, partition_filter: Optional["PathPartitionFilter"] = None, preserve_order: bool = False, + predicate: Optional["Expr"] = None, + limit: Optional[int] = None, + projected_columns: Optional[List[str]] = None, ) -> Iterable[Block]: """Expand path blocks into ``FileManifest`` blocks. @@ -71,6 +75,11 @@ def list_files_for_each_block( Pruners are constructed once per task from ``file_extensions`` / ``partition_filter`` — keeps pruner construction out of the ``_read_datasource_v2`` entry point. + + Pushed-down ``predicate`` / ``limit`` / ``projected_columns`` are forwarded + to the indexer; metadata-aware indexers (e.g. the footer-based Parquet + indexer) use them to skip row groups, stop early, and size projected + columns, while the plain indexer ignores them. """ pruners = _build_pruners(file_extensions, partition_filter) for block in blocks: @@ -79,6 +88,9 @@ def list_files_for_each_block( filesystem=filesystem, pruners=pruners, preserve_order=preserve_order, + predicate=predicate, + limit=limit, + projected_columns=projected_columns, ): if len(manifest) > 0: yield manifest.as_block() @@ -120,40 +132,35 @@ def sample_files( pruners: Optional[List[FilePruner]] = None, max_files: int = 16, ) -> FileManifest: - """Drive the indexer until up to ``max_files`` files arrive; return them. - - Used for driver-side schema inference in ``_read_datasource_v2``. - Sampling more than one file lets callers unify schemas (e.g., if the - first file has an all-null column, later files' non-null types can - promote it). No caching — the returned manifest is discarded after - schema inference, and the ``ListFiles`` op lists the same paths - again on workers at execution time. + """List up to ``max_files`` files and return them as a whole-file manifest. + + Used for driver-side schema inference in ``_read_datasource_v2``. Sampling + more than one file lets callers unify schemas (e.g., if the first file has an + all-null column, later files' non-null types can promote it). No caching -- + the returned manifest is discarded after schema inference, and the + ``ListFiles`` op lists the same paths again on workers at execution time. + + Uses ``list_file_infos`` (raw path + size), not ``list_files``, so that + metadata-heavy indexers (e.g. the footer-based Parquet indexer) don't do + their footer-read + bin-pack work on the driver just to sample a schema -- + schema inference only needs the paths. """ assert max_files >= 1 paths_column = pa.array(paths, type=pa.string()) - collected: List[FileManifest] = [] - collected_rows = 0 - for manifest in indexer.list_files( + sampled_paths: List[str] = [] + sampled_sizes: List[int] = [] + for file_info in indexer.list_file_infos( paths_column, filesystem=filesystem, pruners=pruners or [], preserve_order=True, ): - if len(manifest) == 0: - continue - remaining = max_files - collected_rows - if len(manifest) <= remaining: - collected.append(manifest) - collected_rows += len(manifest) - else: - collected.append( - FileManifest( - BlockAccessor.for_block(manifest.as_block()).slice(0, remaining) - ) - ) - collected_rows = max_files - if collected_rows >= max_files: + sampled_paths.append(file_info.path) + sampled_sizes.append(file_info.size) + if len(sampled_paths) >= max_files: break - if not collected: - return FileManifest.construct_manifest(paths=[], sizes=[], chunk_metadatas=[]) - return FileManifest.concat(collected) + return FileManifest.construct_manifest( + paths=sampled_paths, + sizes=sampled_sizes, + chunk_metadatas=[None] * len(sampled_paths), + ) diff --git a/python/ray/data/_internal/datasource_v2/logical_optimizers.py b/python/ray/data/_internal/datasource_v2/logical_optimizers.py index d6852424509f..aee596717747 100644 --- a/python/ray/data/_internal/datasource_v2/logical_optimizers.py +++ b/python/ray/data/_internal/datasource_v2/logical_optimizers.py @@ -1,4 +1,5 @@ from abc import ABC, abstractmethod +from dataclasses import replace from typing import TYPE_CHECKING, List, Optional, Set, Tuple from ray.data.expressions import Expr @@ -6,6 +7,7 @@ if TYPE_CHECKING: from ray.data._internal.datasource_v2.scanners.scanner import Scanner + from ray.data._internal.logical.interfaces import LogicalOperator @DeveloperAPI @@ -120,3 +122,56 @@ def prune_partitions(self, predicate: "Expr") -> "Scanner": New Scanner instance with partition pruning applied. """ ... + + +def sync_list_files_pushdown(read_files: "LogicalOperator") -> "LogicalOperator": + """Mirror a ``ReadFiles`` scanner's pushed-down state onto its ``ListFiles``. + + Called by the predicate / projection / limit pushdown rules after they push + onto the ``ReadFiles`` scanner. A metadata-aware indexer (e.g. the + footer-based Parquet indexer) reads ``predicate`` / ``projected_columns`` / + ``limit`` off ``ListFiles`` at planning time to prune row groups, size only + projected columns, and stop listing early. + + Reads the pushed state straight from the scanner, so it is inherently gated + on the datasource supporting each pushdown -- the scanner only carries state + it actually accepted (via the ``Supports*`` mixins here). No-op unless + ``read_files`` is a ``ReadFiles`` whose immediate input is a ``ListFiles``. + """ + from ray.data._internal.logical.operators.read_operator import ( + ListFiles, + ReadFiles, + ) + + if not isinstance(read_files, ReadFiles): + return read_files + if not read_files.input_dependencies: + return read_files + upstream = read_files.input_dependencies[0] + if not isinstance(upstream, ListFiles): + return read_files + + scanner = read_files.scanner + predicate = ( + getattr(scanner, "predicate", None) + if isinstance(scanner, SupportsFilterPushdown) + else None + ) + if isinstance(scanner, SupportsColumnPruning): + pruned = scanner.pruned_column_names() + projected_columns = list(pruned) if pruned is not None else None + else: + projected_columns = None + limit = ( + getattr(scanner, "limit", None) + if isinstance(scanner, SupportsLimitPushdown) + else None + ) + + new_list_files = replace( + upstream, + predicate=predicate, + projected_columns=projected_columns, + limit=limit, + ) + return replace(read_files, input_dependencies=[new_list_files]) diff --git a/python/ray/data/_internal/datasource_v2/parquet_datasource_v2.py b/python/ray/data/_internal/datasource_v2/parquet_datasource_v2.py index d064e8401ea2..2abc8c5851ba 100644 --- a/python/ray/data/_internal/datasource_v2/parquet_datasource_v2.py +++ b/python/ray/data/_internal/datasource_v2/parquet_datasource_v2.py @@ -14,22 +14,16 @@ import pyarrow as pa from typing_extensions import override +from ray._common.utils import env_bool, env_integer from ray.data._internal.datasource.parquet_datasource import ( ParquetDatasource, check_for_legacy_tensor_type, ) -from ray.data._internal.datasource_v2.chunkers.file_chunker import ( - FileChunker, - ParquetFileChunker, -) from ray.data._internal.datasource_v2.datasource_v2 import ( DatasourceCategory, DataSourceV2, ) -from ray.data._internal.datasource_v2.listing.file_indexer import ( - FileIndexer, - NonSamplingFileIndexer, -) +from ray.data._internal.datasource_v2.listing.file_indexer import FileIndexer from ray.data._internal.datasource_v2.listing.file_manifest import FileManifest from ray.data._internal.datasource_v2.readers.file_reader import ( INCLUDE_PATHS_COLUMN_NAME, @@ -80,7 +74,6 @@ def __init__( arrow_parquet_args: Optional[dict] = None, schema: Optional[pa.Schema] = None, parquet_format_kwargs: Optional[dict] = None, - file_chunker: Optional[FileChunker] = None, ): super().__init__(name="ParquetV2", category=DatasourceCategory.FILE_BASED) # Capture the ``local://`` check against the *original* paths; @@ -111,14 +104,6 @@ def __init__( # footers, and the scanner pins it on the pyarrow dataset so files # are cast to these types at scan time. self._user_schema = schema - # Chunker that splits each listed Parquet file into one or more - # row-group-aligned read units. Defaults to ``ParquetFileChunker`` - # (1 GiB target chunk size, or whatever ``DataContext`` configures). - # Callers can inject an alternative for tests or shuffle-aware - # planning code that wants whole-file reads. - self._file_chunker: FileChunker = ( - file_chunker if file_chunker is not None else ParquetFileChunker() - ) @property def paths(self) -> List[str]: @@ -149,9 +134,18 @@ def shuffle(self) -> Optional[Union[Literal["files"], "FileShuffleConfig"]]: return self._shuffle def _get_file_indexer(self) -> FileIndexer: - return NonSamplingFileIndexer( + # Parquet V2 reads always use the footer-based indexer: it reads each + # file's footer on a ``FooterReader`` actor pool and packs row groups + # with the online bin packer (predicate/limit push-down + row-group + # skipping), producing accurate row-group-aligned read units. + from ray.data._internal.datasource_v2.listing.footer_file_indexer import ( + FooterFileIndexer, + ) + + return FooterFileIndexer( ignore_missing_paths=self._ignore_missing_paths, - file_chunker=self._file_chunker, + coalesce_bytes=env_integer("RAY_DATA_PARQUET_FOOTER_COALESCE_BYTES", 0), + split_coalesced=env_bool("RAY_DATA_PARQUET_FOOTER_SPLIT_COALESCED", False), ) def get_size_estimator(self) -> ParquetInMemorySizeEstimator: diff --git a/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py new file mode 100644 index 000000000000..567872370c23 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py @@ -0,0 +1,277 @@ +from __future__ import annotations + +import bisect +from collections import defaultdict, deque +from dataclasses import dataclass, field +from typing import Deque, List, Optional, Tuple + +from ray.data._internal.datasource_v2.chunkers.file_chunker import ( + ParquetRowGroupChunkMetadata, + create_chunk_metadata, +) +from ray.data._internal.datasource_v2.chunkers.parquet_footer_types import ( + Bin, + BinItem, + FileChunks, +) +from ray.data._internal.datasource_v2.listing.file_manifest import FileManifest + + +@dataclass +class _OpenBin: + items: List[BinItem] = field(default_factory=list) + used_bytes: int = 0 + + def add(self, item: BinItem) -> None: + self.items.append(item) + self.used_bytes += item.uncompressed_size + + def seal(self) -> Bin: + return Bin(tuple(self.items), self.used_bytes) + + +def _prefix_sums(unit_sizes: List[int]) -> List[int]: + # prefix[i] == sum of the first i unit sizes (prefix[0] == 0). + prefix = [0] + for size in unit_sizes: + prefix.append(prefix[-1] + size) + return prefix + + +def _largest_prefix_fit(prefix: List[int], start: int, cap_left: int) -> int: + # Largest end (exclusive), end >= start, such that the row groups [start, end) + # sum to <= cap_left. prefix[i] is the cumulative size of the first i row + # groups, so sum(sizes[start:end]) == prefix[end] - prefix[start]. Binary + # search for the largest end with prefix[end] <= cap_left + prefix[start]. + # Returns ``start`` when not even one row group fits (caller treats that as + # "nothing fits here"). + end = bisect.bisect_right(prefix, cap_left + prefix[start]) - 1 + return max(end, start) + + +def _slice_bin_item(item: BinItem, a: int, b: int) -> BinItem: + # Row groups [a, b) of a coalesced item as a new contiguous BinItem. Uses the + # exact per-RG sizes/rows so num_rows stays an exact survivor count for the + # limit push-down, and rg_idx shifts by ``a`` because the run is contiguous. + sizes = item.rg_sizes[a:b] + rows = item.rg_rows[a:b] + count = b - a + return BinItem( + path=item.path, + rg_idx=item.rg_idx + a, + uncompressed_size=sum(sizes), + num_rows=sum(rows), + fully_matched=item.fully_matched, + rg_count=count, + rg_sizes=sizes if count > 1 else (), + rg_rows=rows if count > 1 else (), + ) + + +def _subitem(item: BinItem, num_units: int, start: int, end: int) -> BinItem: + # The item covering units [start, end). When that is the whole item, return it + # unchanged (so a non-split item keeps its original rg_count/rg_sizes); + # otherwise carve out the row-group range -- only reached for splittable runs. + if start == 0 and end == num_units: + return item + return _slice_bin_item(item, start, end) + + +def _best_open_bin( + bins: List[_OpenBin], prefix: List[int], start: int, cap: int +) -> Tuple[Optional[_OpenBin], int]: + # Among open bins, the one that swallows the largest prefix of units[start:] + # with the least leftover space (best fit). Returns (bin, end); (None, start) + # if no open bin can take even one unit. + best: Optional[_OpenBin] = None + best_end, best_gap = start, 0 + for b in bins: + room = cap - b.used_bytes + end = _largest_prefix_fit(prefix, start, room) + if end > start: + gap = room - (prefix[end] - prefix[start]) + if best is None or gap < best_gap: + best, best_end, best_gap = b, end, gap + return best, best_end + + +class OnlineBinPacker: + """Streaming coloured bin packer over row-group chunks. + + Feed ``FileChunks`` via :meth:`add_file_chunks`; drain sealed bins (as + :class:`FileManifest` blocks) via :meth:`has_partition` / :meth:`next_partition` + as they become available; call :meth:`finalize` once all chunks are added to + flush the still-open bins. + """ + + def __init__( + self, + max_bin_bytes: int, + *, + max_shared_open_bins: int = 16, + split_coalesced: bool = False, + ): + # ``max_bin_bytes`` doubles as the "colour turns heavy" isolate threshold. + self._cap = max_bin_bytes + self._max_shared_open_bins = max_shared_open_bins + # When True, a coalesced item (rg_count > 1) that does not fit whole is + # split at physical-row-group boundaries to fill residual bin space + # instead of opening a fresh bin. Single row groups stay atomic, so with + # coalescing off (every rg_count == 1) this is a no-op and the packer + # behaves exactly as when the flag is False. + self._split_coalesced = split_coalesced + + self._seen_bytes_by_path: dict = {} # running w(c) per colour + self._shared_bins: List[_OpenBin] = [] # non-isolated bins (mixed colours) + self._heavy_path: Optional[str] = None # current heavy colour + self._heavy_bin: Optional[_OpenBin] = None # its open monochromatic bin + self._output: Deque[Bin] = deque() # sealed bins awaiting drain + + # === Feeding === + + def add_file_chunks(self, file_chunks: FileChunks) -> None: + path = file_chunks.path + for row_group in file_chunks.row_groups: + self._place( + BinItem( + path=path, + rg_idx=row_group.rg_idx, + uncompressed_size=row_group.uncompressed_size, + num_rows=row_group.num_rows, + fully_matched=row_group.fully_matched, + rg_count=row_group.rg_count, + rg_sizes=row_group.rg_sizes, + rg_rows=row_group.rg_rows, + ) + ) + + def _units(self, item: BinItem) -> List[int]: + # The row-group boundaries an item may be cut between, as unit sizes. A + # splittable coalesced run (split_coalesced and rg_count > 1) yields one + # unit per physical row group; anything else yields a single indivisible + # unit (the whole item). Placement only ever cuts at unit boundaries. + if self._split_coalesced and item.rg_count > 1: + return list(item.rg_sizes) + return [item.uncompressed_size] + + def _place(self, item: BinItem) -> None: + item_bytes = item.uncompressed_size + seen_bytes = self._seen_bytes_by_path.get(item.path, 0) + self._seen_bytes_by_path[item.path] = seen_bytes + item_bytes + + if item_bytes > self._cap and len(self._units(item)) == 1: + # Relaxation: an indivisible chunk bigger than a whole bin gets its own + # bin. A splittable oversized run instead falls through and is cut into + # bin-sized pieces by the placers. + self._output.append(Bin((item,), item_bytes)) + elif seen_bytes < self._cap: + self._place_light(item) + else: + self._place_heavy(item) + + def _place_light(self, item: BinItem) -> None: + # LIGHT colour -> shared First-Fit bins. First try to place the WHOLE item + # in the first bin it fits. If it fits nowhere, cut it at unit boundaries + # and best-fit each piece into the tightest open bin, opening a fresh bin + # only when no open bin can take even one unit. (With splitting off the + # item is a single unit, so this reduces to the original First Fit.) + cap = self._cap + units = self._units(item) + prefix = _prefix_sums(units) + total = prefix[-1] + target = next( + (b for b in self._shared_bins if b.used_bytes + total <= cap), None + ) + if target is not None: + target.add(item) + return + start = 0 + while start < len(units): + target, end = _best_open_bin(self._shared_bins, prefix, start, cap) + if target is None: + if len(self._shared_bins) >= self._max_shared_open_bins: + fullest = max(self._shared_bins, key=lambda b: b.used_bytes) + self._shared_bins.remove(fullest) + self._output.append(fullest.seal()) + target = _OpenBin() + self._shared_bins.append(target) + # A lone unit larger than a whole bin gets its own (over-sized) bin. + end = max(_largest_prefix_fit(prefix, start, cap), start + 1) + target.add(_subitem(item, len(units), start, end)) + start = end + + def _place_heavy(self, item: BinItem) -> None: + # HEAVY colour -> dedicated monochromatic bins. Fill the open bin at a unit + # boundary, seal it once full, and carry any remnant into the next bin. + # (With splitting off the item is a single unit, so this reduces to the + # original Next Fit.) + cap = self._cap + if self._heavy_path != item.path: + if self._heavy_bin is not None: + self._output.append(self._heavy_bin.seal()) + self._heavy_path, self._heavy_bin = item.path, _OpenBin() + units = self._units(item) + prefix = _prefix_sums(units) + start = 0 + while start < len(units): + end = _largest_prefix_fit(prefix, start, cap - self._heavy_bin.used_bytes) + if end == start: # nothing fits the open bin + if self._heavy_bin.items: # seal it and retry on a fresh bin + self._output.append(self._heavy_bin.seal()) + self._heavy_bin = _OpenBin() + continue + end = start + 1 # empty bin, lone unit > cap -> relaxation + self._heavy_bin.add(_subitem(item, len(units), start, end)) + start = end + if start < len(units): # remnant remains -> bin is full, seal + self._output.append(self._heavy_bin.seal()) + self._heavy_bin = _OpenBin() + + # === Draining === + + def has_partition(self) -> bool: + return len(self._output) > 0 + + def next_partition(self) -> FileManifest: + return self._bin_to_manifest(self._output.popleft()) + + def finalize(self) -> None: + # Flush everything still open. + if self._heavy_bin is not None and self._heavy_bin.items: + self._output.append(self._heavy_bin.seal()) + self._heavy_bin = None + self._heavy_path = None + for open_bin in self._shared_bins: + if open_bin.items: + self._output.append(open_bin.seal()) + self._shared_bins = [] + + @staticmethod + def _bin_to_manifest(bin_: Bin) -> FileManifest: + # One manifest row per distinct file in the bin. A file's (possibly-split) + # items cover disjoint contiguous runs, so union their physical row-group + # ids into the read unit for that file. + ids_by_path: defaultdict = defaultdict(list) + rows_by_path: defaultdict = defaultdict(int) + size_by_path: defaultdict = defaultdict(int) + for item in bin_.items: + ids_by_path[item.path].extend( + range(item.rg_idx, item.rg_idx + item.rg_count) + ) + rows_by_path[item.path] += item.num_rows + size_by_path[item.path] += item.uncompressed_size + + paths: List[str] = [] + sizes: List[int] = [] + chunk_metadatas: List[ParquetRowGroupChunkMetadata] = [] + for path, ids in ids_by_path.items(): + paths.append(path) + sizes.append(size_by_path[path]) + chunk_metadatas.append( + create_chunk_metadata( + ParquetRowGroupChunkMetadata, + row_group_ids=tuple(sorted(ids)), + num_rows=rows_by_path[path], + ) + ) + return FileManifest.construct_manifest(paths, sizes, chunk_metadatas) diff --git a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py index 37498178ea0f..b9964c17750f 100644 --- a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py @@ -18,7 +18,7 @@ _check_for_pickle_object_columns, ) from ray.data._internal.datasource_v2.chunkers.parquet_file_chunking_utils import ( - _fragments_from_chunk_metadata, + _fragments_from_row_group_ids, ) from ray.data._internal.datasource_v2.listing.file_manifest import FileManifest from ray.data._internal.datasource_v2.readers.file_reader import ( @@ -279,29 +279,28 @@ def _get_fragments_to_read( dataset: pds.Dataset, manifest: FileManifest, ) -> List[Tuple[pds.Fragment, int]]: - """Fan file fragments into chunk-level sub-fragments per manifest row. + """Fan file fragments into read-level sub-fragments per manifest row. For each manifest row, looks up the file's fragment by path and: - If ``chunk_metadata`` is ``None`` (whole-file case), the file - fragment is yielded as-is with a row offset of 0. This matches - ``ParquetFileChunker``'s behavior for files at or below - ``target_chunk_size`` and the default ``WholeFileChunker`` for - non-chunking callers. - - Otherwise the row carries a :class:`ParquetFileChunkMetadata`; + fragment is yielded as-is with a row offset of 0 (the default + ``WholeFileChunker`` for non-chunking callers). + - Otherwise the row carries a :class:`ParquetRowGroupChunkMetadata` + naming the exact physical row groups the bin assigned to this file + (predicate pruning + bin packing already happened in ``ListFiles``); we slice the fragment via - :func:`~ray.data._internal.datasource_v2.chunkers.parquet_file_chunking_utils._fragments_from_chunk_metadata` - which returns one sub-fragment per row group in the chunk's - row-group range, paired with the cumulative pre-filter row - offset of that row group within the file. The downstream - ``_compute_row_hashes`` call uses this offset so row hashes - remain unique across sub-fragments that share ``fragment.path``. + :func:`~ray.data._internal.datasource_v2.chunkers.parquet_file_chunking_utils._fragments_from_row_group_ids`. + When ``include_row_hash`` is on it fans out one sub-fragment per row + group, each paired with its cumulative pre-filter row offset, so the + downstream ``_compute_row_hashes`` call keeps hashes unique across + sub-fragments that share ``fragment.path``. Paths are deduped by :meth:`FileReader.read` before the dataset is built, so the dataset has exactly one fragment per file. The per-row chunk metadata drives the fan-out here, not the dataset itself — multiple manifest rows can share a single path with - different chunk indices. + different row-group sets. """ path_to_fragment = { fragment.path: fragment for fragment in dataset.get_fragments() @@ -313,7 +312,11 @@ def _get_fragments_to_read( fragments.append((fragment, 0)) else: fragments.extend( - _fragments_from_chunk_metadata(fragment, chunk_metadata) + _fragments_from_row_group_ids( + fragment, + chunk_metadata["row_group_ids"], + per_row_group_offsets=self._include_row_hash, + ) ) return fragments diff --git a/python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py b/python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py new file mode 100644 index 000000000000..6d06f03def55 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py @@ -0,0 +1,249 @@ +"""Tests for the footer-based Parquet chunking path. + +Covers the pure-logic pieces (row-group coalescing and the online bin packer, +including the split-coalesced no-op invariant) without a Ray cluster, plus a few +end-to-end reads that exercise ``FooterFileIndexer`` through +``ray.data.read_parquet`` with predicate / limit / projection push-down. +""" + +import pytest + +from ray.data._internal.datasource_v2.chunkers.parquet_footer_types import ( + FileChunks, + RowGroupInfo, +) +from ray.data._internal.datasource_v2.listing.file_manifest import FileManifest +from ray.data._internal.datasource_v2.listing.footer_reader import coalesce_row_groups +from ray.data._internal.datasource_v2.partitioners.online_bin_packer import ( + OnlineBinPacker, +) + + +def _rg(idx, size, rows=10, fully_matched=True): + return RowGroupInfo( + rg_idx=idx, uncompressed_size=size, num_rows=rows, fully_matched=fully_matched + ) + + +# --------------------------------------------------------------------------- +# coalesce_row_groups (pure) +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "per_rg, target, expected", + [ + pytest.param( + [_rg(0, 10), _rg(1, 20), _rg(2, 30)], + 0, + [(0, 1, 10, 10), (1, 1, 20, 10), (2, 1, 30, 10)], + id="disabled-is-identity", + ), + pytest.param( + [_rg(0, 10, 1), _rg(1, 10, 2), _rg(2, 10, 3)], + 25, + [(0, 3, 30, 6)], + id="merge-contiguous-until-target", + ), + pytest.param( + [_rg(0, 10, fully_matched=True), _rg(1, 10, fully_matched=False)], + 1000, + [(0, 1, 10, 10), (1, 1, 10, 10)], + id="break-on-fully-matched-change", + ), + pytest.param( + [_rg(0, 10), _rg(2, 10)], + 1000, + [(0, 1, 10, 10), (2, 1, 10, 10)], + id="break-on-index-gap", + ), + ], +) +def test_coalesce(per_rg, target, expected): + out = coalesce_row_groups(per_rg, target) + + assert [ + (c.rg_idx, c.rg_count, c.uncompressed_size, c.num_rows) for c in out + ] == expected + # Every physical row group is covered exactly once. + covered = [i for c in out for i in range(c.rg_idx, c.rg_idx + c.rg_count)] + assert sorted(covered) == sorted(r.rg_idx for r in per_rg) + # Per-group breakdown is attached iff the chunk is coalesced (rg_count > 1). + for c in out: + if c.rg_count > 1: + assert len(c.rg_sizes) == c.rg_count and len(c.rg_rows) == c.rg_count + else: + assert c.rg_sizes == () and c.rg_rows == () + + +# --------------------------------------------------------------------------- +# OnlineBinPacker (pure) +# --------------------------------------------------------------------------- + + +def _manifest_map(manifest: FileManifest): + """A sealed bin's manifest as ``{path: sorted physical row-group ids}``.""" + return { + str(path): sorted(meta["row_group_ids"]) + for path, meta in zip(manifest.paths, manifest.file_chunk_metadatas) + } + + +def _pack(file_chunks_list, max_bin_bytes, **kwargs): + packer = OnlineBinPacker(max_bin_bytes, **kwargs) + bins = [] + for file_chunks in file_chunks_list: + packer.add_file_chunks(file_chunks) + while packer.has_partition(): + bins.append(_manifest_map(packer.next_partition())) + packer.finalize() + while packer.has_partition(): + bins.append(_manifest_map(packer.next_partition())) + return bins + + +def _pairs(bins): + """All ``(path, rg_id)`` pairs across bins, sorted.""" + return sorted((p, i) for b in bins for p, ids in b.items() for i in ids) + + +@pytest.mark.parametrize( + "files, max_bin, expected_bins", + [ + pytest.param( + [FileChunks("a", 10, (_rg(0, 10),)), FileChunks("b", 10, (_rg(0, 10),))], + 1000, + [{"a": [0], "b": [0]}], + id="light-colours-share-a-bin", + ), + pytest.param( + [FileChunks("a", 500, (_rg(0, 500),))], + 100, + [{"a": [0]}], + id="oversize-group-gets-own-bin", + ), + ], +) +def test_packer_placement(files, max_bin, expected_bins): + assert _pack(files, max_bin) == expected_bins + + +def test_packer_heavy_colour_spans_multiple_bins(): + # A file far heavier than one bin spills into several bins (exact split point + # depends on the light->heavy threshold, so assert coverage, not layout). + files = [FileChunks("a", 400, tuple(_rg(i, 100) for i in range(4)))] + bins = _pack(files, max_bin_bytes=100) + assert len(bins) == 4 + assert _pairs(bins) == [("a", i) for i in range(4)] + + +@pytest.mark.parametrize("split_coalesced", [False, True]) +def test_packer_covers_every_row_group_exactly_once(split_coalesced): + files = [ + FileChunks("a", 120, tuple(_rg(i, 30) for i in range(4))), + FileChunks("b", 90, tuple(_rg(i, 30) for i in range(3))), + ] + pairs = _pairs(_pack(files, max_bin_bytes=100, split_coalesced=split_coalesced)) + expected = sorted([("a", i) for i in range(4)] + [("b", i) for i in range(3)]) + assert pairs == expected + assert len(pairs) == len(set(pairs)) # no duplicates + + +def test_split_coalesced_is_noop_without_coalescing(): + # With every rg_count == 1, the split flag must not change the packing. + files = [ + FileChunks("a", 120, tuple(_rg(i, 40) for i in range(3))), + FileChunks("b", 80, tuple(_rg(i, 40) for i in range(2))), + ] + assert _pack(files, 100, split_coalesced=False) == _pack( + files, 100, split_coalesced=True + ) + + +def test_split_coalesced_splits_oversize_run_at_boundaries(): + # A coalesced chunk (rg 0..2) that can't fit whole in a 50-byte bin is cut at + # physical row-group boundaries; every group still appears exactly once. + coalesced = RowGroupInfo( + rg_idx=0, + uncompressed_size=90, + num_rows=30, + rg_count=3, + rg_sizes=(30, 30, 30), + rg_rows=(10, 10, 10), + ) + bins = _pack([FileChunks("a", 90, (coalesced,))], 50, split_coalesced=True) + assert _pairs(bins) == [("a", 0), ("a", 1), ("a", 2)] + assert len(bins) >= 2 # 90 bytes across 50-byte bins + + +# --------------------------------------------------------------------------- +# End-to-end through ray.data.read_parquet (footer path) +# --------------------------------------------------------------------------- + +_N_PER_FILE = 400 +_N_FILES = 3 + + +@pytest.fixture +def footer_parquet(tmp_path, monkeypatch): + """Write a small multi-row-group Parquet dataset; enable the footer path.""" + import pyarrow as pa + import pyarrow.parquet as pq + + from ray.data.context import DataContext + + # Footer chunking is the default for Parquet V2; just keep the pool small. + monkeypatch.setenv("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", "2") + monkeypatch.setenv("RAY_DATA_PARQUET_FOOTER_BATCH_SIZE", "2") + + ctx = DataContext.get_current() + prev_v2 = ctx.use_datasource_v2 + ctx.use_datasource_v2 = True + + for f in range(_N_FILES): + start = f * _N_PER_FILE + table = pa.table( + { + "id": list(range(start, start + _N_PER_FILE)), + "val": [f"v{i}" for i in range(_N_PER_FILE)], + } + ) + pq.write_table(table, str(tmp_path / f"part_{f}.parquet"), row_group_size=100) + + try: + yield str(tmp_path) + finally: + ctx.use_datasource_v2 = prev_v2 + + +def test_e2e_footer_read_matches_expected(footer_parquet): + import ray + + total = _N_PER_FILE * _N_FILES + ds = ray.data.read_parquet(footer_parquet) + assert ds.count() == total + assert sorted(r["id"] for r in ds.take_all()) == list(range(total)) + + +@pytest.mark.parametrize( + "op, expected", + [ + pytest.param(lambda ds: ds.filter(expr="id < 50").count(), 50, id="filter"), + pytest.param(lambda ds: ds.limit(10).count(), 10, id="limit"), + pytest.param( + lambda ds: ds.select_columns(["id"]).schema().names, + ["id"], + id="projection", + ), + ], +) +def test_e2e_footer_pushdowns(footer_parquet, op, expected): + import ray + + assert op(ray.data.read_parquet(footer_parquet)) == expected + + +if __name__ == "__main__": + import sys + + sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py b/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py index 447a405a8573..b5b6a52cb75d 100644 --- a/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py +++ b/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py @@ -9,19 +9,15 @@ import pyarrow as pa import pyarrow.parquet as pq -import pytest from ray.data._internal.datasource_v2.chunkers.file_chunker import ( - ParquetFileChunker, - ParquetFileChunkMetadata, - WholeFileChunker, + ParquetRowGroupChunkMetadata, create_chunk_metadata, ) -from ray.data._internal.datasource_v2.chunkers.parquet_file_chunking_utils import ( - _calculate_row_group_range, - _fragments_from_chunk_metadata, -) from ray.data._internal.datasource_v2.listing.file_manifest import FileManifest +from ray.data._internal.datasource_v2.listing.footer_file_indexer import ( + FooterFileIndexer, +) from ray.data._internal.datasource_v2.parquet_datasource_v2 import ( ParquetDatasourceV2, ) @@ -209,72 +205,13 @@ def test_nested_fallback_handles_schema_evolution(tmp_path, monkeypatch): assert rows_by_fragment == {"with_b.parquet": 2, "without_b.parquet": 0} -def test_datasource_defaults_to_parquet_file_chunker(tmp_path): - """``ParquetDatasourceV2`` plugs ``ParquetFileChunker`` into its indexer.""" +def test_datasource_uses_footer_indexer(tmp_path): + """``ParquetDatasourceV2`` uses the footer-based indexer for row-group reads.""" file_path = tmp_path / "data.parquet" _write_parquet(str(file_path), pa.table({"a": [1, 2, 3]})) datasource = ParquetDatasourceV2([str(file_path)]) - indexer = datasource._get_file_indexer() - assert isinstance(indexer.file_chunker, ParquetFileChunker) - - -def test_datasource_accepts_custom_chunker(tmp_path): - """An explicit ``file_chunker`` override propagates to the indexer.""" - file_path = tmp_path / "data.parquet" - _write_parquet(str(file_path), pa.table({"a": [1, 2, 3]})) - - custom = WholeFileChunker() - datasource = ParquetDatasourceV2([str(file_path)], file_chunker=custom) - indexer = datasource._get_file_indexer() - assert indexer.file_chunker is custom - - -@pytest.mark.parametrize( - "total_row_groups,total_num_chunks,expected_ranges", - [ - # Even distribution. - (10, 2, [(0, 5), (5, 10)]), - (12, 3, [(0, 4), (4, 8), (8, 12)]), - (20, 4, [(0, 5), (5, 10), (10, 15), (15, 20)]), - # Uneven distribution: earlier chunks get extra row groups. - (10, 3, [(0, 4), (4, 7), (7, 10)]), - (11, 3, [(0, 4), (4, 8), (8, 11)]), - (13, 4, [(0, 4), (4, 7), (7, 10), (10, 13)]), - # Edge cases — over-estimated chunk counts must produce ``None``. - (1, 1, [(0, 1)]), - (1, 2, [(0, 1), None]), - (0, 1, [None]), - (5, 10, [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)] + [None] * 5), - ], -) -def test_calculate_row_group_range_distribution( - total_row_groups, total_num_chunks, expected_ranges -): - """Row-group distribution across chunks is even and covers everything.""" - for chunk_idx in range(total_num_chunks): - result = _calculate_row_group_range( - chunk_idx, total_num_chunks, total_row_groups - ) - expected = ( - expected_ranges[chunk_idx] if chunk_idx < len(expected_ranges) else None - ) - assert ( - result == expected - ), f"Chunk {chunk_idx}: expected {expected}, got {result}" - - # No gaps, no overlaps, every row group covered exactly once. - covered = set() - for chunk_idx in range(total_num_chunks): - result = _calculate_row_group_range( - chunk_idx, total_num_chunks, total_row_groups - ) - if result is not None: - start, end = result - chunk_rows = set(range(start, end)) - assert not (covered & chunk_rows) - covered.update(chunk_rows) - assert covered == set(range(total_row_groups)) + assert isinstance(datasource._get_file_indexer(), FooterFileIndexer) def _write_multi_row_group_parquet(path, num_rows: int, row_group_size: int): @@ -283,139 +220,50 @@ def _write_multi_row_group_parquet(path, num_rows: int, row_group_size: int): return table -def test_fragments_from_chunk_metadata_subsets_by_row_group(tmp_path): - """``_fragments_from_chunk_metadata`` slices a file fragment per chunk.""" - import pyarrow.dataset as pds - - file_path = str(tmp_path / "multi.parquet") - # 1000 rows, 100 row groups (row_group_size=10). - _write_multi_row_group_parquet(file_path, num_rows=1000, row_group_size=10) - - dataset = pds.dataset(file_path, format="parquet") - (fragment,) = dataset.get_fragments() - assert fragment.metadata.num_row_groups == 100 - - # 100 row groups split into 4 chunks -> 25 row groups each. - chunk_md = create_chunk_metadata( - ParquetFileChunkMetadata, chunk_idx=1, total_num_chunks=4 +def _row_group_manifest(path, row_group_ids, num_rows): + """A one-row footer-path manifest selecting explicit row groups of a file.""" + return FileManifest.construct_manifest( + [path], + [0], + [ + create_chunk_metadata( + ParquetRowGroupChunkMetadata, + row_group_ids=tuple(row_group_ids), + num_rows=num_rows, + ) + ], ) - sub_fragments = _fragments_from_chunk_metadata(fragment, chunk_md) - assert len(sub_fragments) == 25 - # chunk_idx=1, 25 rows/chunk * 10 rows/row_group = starting offset 250. - expected_offset = 250 - for sub, offset in sub_fragments: - assert len(sub.row_groups) == 1 - assert offset == expected_offset - expected_offset += sub.metadata.row_group(sub.row_groups[0].id).num_rows -def test_fragments_from_chunk_metadata_returns_empty_for_out_of_range_chunk( - tmp_path, -): - """Over-estimated chunk indices fall off the end → no sub-fragments.""" - import pyarrow.dataset as pds - - file_path = str(tmp_path / "single.parquet") - # 5 rows, single row group. - _write_multi_row_group_parquet(file_path, num_rows=5, row_group_size=5) - - dataset = pds.dataset(file_path, format="parquet") - (fragment,) = dataset.get_fragments() - - # chunk_idx=4 with 5 chunks but only 1 row group → no sub-fragments. - chunk_md = create_chunk_metadata( - ParquetFileChunkMetadata, chunk_idx=4, total_num_chunks=5 - ) - assert _fragments_from_chunk_metadata(fragment, chunk_md) == [] - - -def _read_via_reader(reader, manifest): - return list(reader.read(manifest)) - - -def test_parquet_file_reader_reads_chunked_manifest(tmp_path): - """End-to-end: a manifest with per-chunk rows is read into the same rows - as a single whole-file manifest.""" +def test_parquet_file_reader_reads_selected_row_groups(tmp_path): + """The reader reads exactly the row groups named by the footer metadata.""" file_path = str(tmp_path / "data.parquet") - expected_rows = 200 - _write_multi_row_group_parquet(file_path, num_rows=expected_rows, row_group_size=20) - file_size = os.path.getsize(file_path) - - reader_whole = ParquetFileReader() - whole_manifest = FileManifest.construct_manifest([file_path], [file_size], [None]) - whole_tables = _read_via_reader(reader_whole, whole_manifest) - whole_rows = pa.concat_tables(whole_tables).column("id").to_pylist() - - chunker = ParquetFileChunker(target_chunk_size=1024) - chunks = list(chunker.generate_chunk_metadatas(file_path, file_size)) - assert len(chunks) > 1, "test setup expects ParquetFileChunker to chunk" - - paths = [file_path] * len(chunks) - chunk_metadatas = [md for md, _ in chunks] - chunk_sizes = [sz for _, sz in chunks] - chunked_manifest = FileManifest.construct_manifest( - paths, chunk_sizes, chunk_metadatas - ) - - reader_chunked = ParquetFileReader() - chunked_tables = _read_via_reader(reader_chunked, chunked_manifest) - chunked_rows = pa.concat_tables(chunked_tables).column("id").to_pylist() + # 200 rows, 10 row groups of 20 rows each. + _write_multi_row_group_parquet(file_path, num_rows=200, row_group_size=20) - assert sorted(chunked_rows) == sorted(whole_rows) == list(range(expected_rows)) + # Select row groups 0, 2, 5 -> rows [0,20) + [40,60) + [100,120). + manifest = _row_group_manifest(file_path, row_group_ids=[0, 2, 5], num_rows=60) + tables = list(ParquetFileReader().read(manifest)) + rows = sorted(pa.concat_tables(tables).column("id").to_pylist()) + expected = list(range(0, 20)) + list(range(40, 60)) + list(range(100, 120)) + assert rows == sorted(expected) -def test_parquet_file_reader_chunked_row_hashes_are_unique(tmp_path): - """Row hashes must remain unique across chunked sub-fragments of the - same file. +def test_parquet_file_reader_row_group_row_hashes_are_unique(tmp_path): + """Row hashes stay unique across per-row-group sub-fragments of one file. - Regression: ``_read_fragments_sequential`` previously reseeded - ``offset=0`` for every fragment. Since chunked sub-fragments share - ``fragment.path``, ``_compute_row_hashes(path, 0, n)`` collided across - row groups of the same file. + With ``include_row_hash`` the footer path fans one sub-fragment per row + group, each seeded with its cumulative file row offset, so hashes can't + collide across row groups that share ``fragment.path``. """ file_path = str(tmp_path / "data.parquet") expected_rows = 200 _write_multi_row_group_parquet(file_path, num_rows=expected_rows, row_group_size=20) - file_size = os.path.getsize(file_path) - chunker = ParquetFileChunker(target_chunk_size=1024) - chunks = list(chunker.generate_chunk_metadatas(file_path, file_size)) - assert len(chunks) > 1, "test setup expects ParquetFileChunker to chunk" - - paths = [file_path] * len(chunks) - chunk_metadatas = [md for md, _ in chunks] - chunk_sizes = [sz for _, sz in chunks] - chunked_manifest = FileManifest.construct_manifest( - paths, chunk_sizes, chunk_metadatas + manifest = _row_group_manifest( + file_path, row_group_ids=range(10), num_rows=expected_rows ) - reader = ParquetFileReader(include_row_hash=True) - chunked_tables = list(reader.read(chunked_manifest)) - hashes = pa.concat_tables(chunked_tables).column("row_hash").to_pylist() + hashes = pa.concat_tables(reader.read(manifest)).column("row_hash").to_pylist() assert len(hashes) == expected_rows - assert ( - len(set(hashes)) == expected_rows - ), "row_hash must be unique across chunked sub-fragments of one file" - - -def test_parquet_file_reader_handles_out_of_range_chunks(tmp_path): - """Out-of-range chunk metadata is silently dropped — no exception, no rows.""" - file_path = str(tmp_path / "tiny.parquet") - _write_multi_row_group_parquet(file_path, num_rows=5, row_group_size=5) - - file_size = os.path.getsize(file_path) - # ``ParquetFileChunker`` over-estimates here; keep only the over-estimated - # tail (chunk_idx >= 1) to assert the reader yields no tables. - chunker = ParquetFileChunker(target_chunk_size=128) - chunks = list(chunker.generate_chunk_metadatas(file_path, file_size)) - assert len(chunks) > 1 - - paths = [file_path] * (len(chunks) - 1) - out_of_range_metadatas = [md for md, _ in chunks[1:]] - sizes = [sz for _, sz in chunks[1:]] - manifest = FileManifest.construct_manifest(paths, sizes, out_of_range_metadatas) - - reader = ParquetFileReader() - tables = list(reader.read(manifest)) - # All sub-fragments are out-of-range -> 0 tables emitted. - assert sum(t.num_rows for t in tables) == 0 + assert len(set(hashes)) == expected_rows diff --git a/python/ray/data/_internal/logical/operators/read_operator.py b/python/ray/data/_internal/logical/operators/read_operator.py index 03d373c1f615..03aa88632e0a 100644 --- a/python/ray/data/_internal/logical/operators/read_operator.py +++ b/python/ray/data/_internal/logical/operators/read_operator.py @@ -448,6 +448,16 @@ class ListFiles(LogicalOperator, SourceOperator): shuffle_config_factory: Callable[[], Optional["FileShuffleConfig"]] = field( default=lambda: None ) + # Pushed-down read constraints, populated by the optimizer rules + # (``predicate_pushdown`` / ``projection_pushdown`` / ``limit_pushdown``). + # A ``StreamingFileChunker`` (e.g. the Parquet footer chunker) uses them to + # prune row groups, size only projected columns, and stop listing early; + # the per-file listing path ignores them. Whether footer-based chunking runs + # is decided by the indexer's chunker type, not a flag here -- this op stays + # format-agnostic. + predicate: Optional[Expr] = None + projected_columns: Optional[List[str]] = None + limit: Optional[int] = None _name: str = field(init=False, repr=False) _input_dependencies: List[LogicalOperator] = field( init=False, repr=False, default_factory=list diff --git a/python/ray/data/_internal/logical/rules/limit_pushdown.py b/python/ray/data/_internal/logical/rules/limit_pushdown.py index 70f410679047..1b2cb062cf4d 100644 --- a/python/ray/data/_internal/logical/rules/limit_pushdown.py +++ b/python/ray/data/_internal/logical/rules/limit_pushdown.py @@ -232,12 +232,15 @@ def _apply_per_block_limit_if_supported( if isinstance(op, ReadFiles): from ray.data._internal.datasource_v2.logical_optimizers import ( SupportsLimitPushdown, + sync_list_files_pushdown, ) if isinstance(op.scanner, SupportsLimitPushdown): - return replace( - op, - scanner=op.scanner.push_limit(limit), + # Mirror the pushed limit onto the upstream ``ListFiles`` + # so a footer-based indexer can stop listing early once + # enough exact-survivor rows are found. + return sync_list_files_pushdown( + replace(op, scanner=op.scanner.push_limit(limit)) ) return op assert len(op.input_dependencies) == 1, len(op.input_dependencies) diff --git a/python/ray/data/_internal/logical/rules/predicate_pushdown.py b/python/ray/data/_internal/logical/rules/predicate_pushdown.py index 44ac6e62eb8a..88b0a11829f3 100644 --- a/python/ray/data/_internal/logical/rules/predicate_pushdown.py +++ b/python/ray/data/_internal/logical/rules/predicate_pushdown.py @@ -286,6 +286,31 @@ def _try_push_down_predicate(cls, op: LogicalOperator) -> LogicalOperator: if result_op is input_op: return filter_op + # Mirror the pushed (data-column) predicate onto an upstream + # ``ListFiles`` so a footer-based indexer can skip row groups by + # their statistics. ``apply_predicate`` may wrap the ``ReadFiles`` in + # a ``Filter`` (partition residual); sync the ``ReadFiles`` in either + # shape. No-op for datasources without a ``ListFiles``. + from ray.data._internal.datasource_v2.logical_optimizers import ( + sync_list_files_pushdown, + ) + from ray.data._internal.logical.operators.read_operator import ( + ReadFiles, + ) + + if isinstance(result_op, ReadFiles): + result_op = sync_list_files_pushdown(result_op) + elif ( + isinstance(result_op, Filter) + and result_op.input_dependencies + and isinstance(result_op.input_dependencies[0], ReadFiles) + ): + synced = sync_list_files_pushdown(result_op.input_dependencies[0]) + result_op = Filter( + predicate_expr=result_op.predicate_expr, + input_dependencies=[synced], + ) + # Convertible conjuncts were pushed into the read. Re-apply any # residual (non-convertible) conjuncts as a Filter above it. if split.residual is None: diff --git a/python/ray/data/_internal/logical/rules/projection_pushdown.py b/python/ray/data/_internal/logical/rules/projection_pushdown.py index 40c70dd87416..f251c7a72416 100644 --- a/python/ray/data/_internal/logical/rules/projection_pushdown.py +++ b/python/ray/data/_internal/logical/rules/projection_pushdown.py @@ -472,6 +472,14 @@ def _push_projection_into_read_op(cls, op: LogicalOperator) -> LogicalOperator: else {name: name for name in required_columns} ) projected_input_op = input_op.apply_projection(projection_map) + # Mirror the pruned columns onto an upstream ``ListFiles`` (if any) + # so a footer-based indexer sizes only projected columns. No-op for + # datasources without a ``ListFiles`` / column-pruning support. + from ray.data._internal.datasource_v2.logical_optimizers import ( + sync_list_files_pushdown, + ) + + projected_input_op = sync_list_files_pushdown(projected_input_op) # If the ``Project`` is a pure-prune (only ``col()`` refs, # no renames, no computed expressions), the projection diff --git a/python/ray/data/_internal/planner/plan_list_files_op.py b/python/ray/data/_internal/planner/plan_list_files_op.py index 7a01125acb12..360bb1a79a41 100644 --- a/python/ray/data/_internal/planner/plan_list_files_op.py +++ b/python/ray/data/_internal/planner/plan_list_files_op.py @@ -70,6 +70,11 @@ def plan_list_files_op( shuffle_config = op.shuffle_config_factory() + # Some indexers (e.g. the footer-based Parquet indexer) already emit + # bin-packed read units from ``list_files`` -- they need the whole file + # stream on one task to pack globally, and there's nothing left to partition. + yields_read_units = indexer.yields_read_units + transform_fns: List[MapTransformFn] = [ BlockMapTransformFn( partial( @@ -79,6 +84,11 @@ def plan_list_files_op( file_extensions=file_extensions, partition_filter=partition_filter, preserve_order=data_context.execution_options.preserve_order, + # Pushed-down read constraints; metadata-aware indexers use them + # to prune row groups, stop early, and size projected columns. + predicate=op.predicate, + limit=op.limit, + projected_columns=op.projected_columns, ), # Disable block-shaping: produce manifest blocks as-is. disable_block_shaping=True, @@ -97,7 +107,7 @@ def plan_list_files_op( ) ) - if partitioner is not None: + if partitioner is not None and not yields_read_units: transform_fns.append( BlockMapTransformFn( partial(partition_files, partitioner=partitioner), @@ -112,9 +122,10 @@ def plan_list_files_op( _create_input_data_buffer( op, data_context, - # Shuffle needs every manifest on a single task to compute one - # global RNG over the full listing. - should_parallelize=shuffle_config is None, + # A single task is required when shuffle needs one global RNG over + # the full listing, or when the indexer bin-packs read units itself + # (it must see the whole file stream to pack globally). + should_parallelize=shuffle_config is None and not yields_read_units, ), data_context, name="ListFiles", diff --git a/python/ray/data/read_api.py b/python/ray/data/read_api.py index 8cbdf234d6ae..d1ea89787b1d 100644 --- a/python/ray/data/read_api.py +++ b/python/ray/data/read_api.py @@ -542,11 +542,17 @@ def _read_datasource_v2( # (``-1`` when unset). Honoring it here per-read avoids mutating the # process-global ``DataContext.read_op_min_num_blocks``. num_buckets = parallelism if parallelism != -1 else ctx.read_op_min_num_blocks - partitioner = RoundRobinPartitioner( - in_memory_size_estimator=datasource.get_size_estimator(), - min_bucket_size=min_bucket_size, - max_bucket_size=max_bucket_size, - num_buckets=num_buckets, + # An indexer that already emits bin-packed read units (e.g. the footer-based + # Parquet indexer) doesn't use the size-estimate ``RoundRobinPartitioner``. + partitioner = ( + None + if getattr(indexer, "yields_read_units", False) + else RoundRobinPartitioner( + in_memory_size_estimator=datasource.get_size_estimator(), + min_bucket_size=min_bucket_size, + max_bucket_size=max_bucket_size, + num_buckets=num_buckets, + ) ) # NOTE: We're using shuffle config factory to fix the seed at the planning diff --git a/python/ray/data/tests/datasource/test_read_parquet_v2.py b/python/ray/data/tests/datasource/test_read_parquet_v2.py index 42547e88f5a3..639d6a06a97e 100644 --- a/python/ray/data/tests/datasource/test_read_parquet_v2.py +++ b/python/ray/data/tests/datasource/test_read_parquet_v2.py @@ -11,8 +11,8 @@ import pytest import ray -from ray.data._internal.datasource_v2.partitioners.round_robin_partitioner import ( - RoundRobinPartitioner, +from ray.data._internal.datasource_v2.listing.footer_file_indexer import ( + FooterFileIndexer, ) from ray.data._internal.datasource_v2.scanners.parquet_scanner import ParquetScanner from ray.data._internal.logical.operators import ListFiles, ReadFiles @@ -125,19 +125,21 @@ def test_read_parquet_v2_columns_with_include_paths_preserves_path( assert [expr.name for expr in dag.exprs] == ["a", "path"] -def test_read_parquet_v2_override_num_blocks_drives_partitioner(tmp_path, restore_ctx): +def test_read_parquet_v2_uses_footer_indexer_without_partitioner(tmp_path, restore_ctx): _write(tmp_path / "data.parquet", pa.table({"a": [1, 2, 3]})) restore_ctx.use_datasource_v2 = True original = restore_ctx.read_op_min_num_blocks ds = ray.data.read_parquet(str(tmp_path), override_num_blocks=7) - # The override should drive the ListFiles partitioner's bucket count - # for this read only — the global DataContext must not be mutated. + # Parquet V2 uses the footer indexer, which bin-packs read units itself, so + # ``ListFiles`` carries no size-balancing partitioner (``override_num_blocks`` + # no longer drives a partitioner bucket count for Parquet). The global + # DataContext must not be mutated. list_files_op = ds._logical_plan.dag.input_dependencies[0] assert isinstance(list_files_op, ListFiles) - assert isinstance(list_files_op.file_partitioner, RoundRobinPartitioner) - assert list_files_op.file_partitioner.num_buckets == 7 + assert isinstance(list_files_op.file_indexer, FooterFileIndexer) + assert list_files_op.file_partitioner is None assert restore_ctx.read_op_min_num_blocks == original diff --git a/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py b/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py index 0d83f1b8a102..ee610a17e920 100644 --- a/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py +++ b/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py @@ -7,8 +7,7 @@ ChunkMetadata, LineDelimitedFileChunker, LineDelimitedFileChunkMetadata, - ParquetFileChunker, - ParquetFileChunkMetadata, + ParquetRowGroupChunkMetadata, WholeFileChunker, create_chunk_metadata, ) @@ -17,22 +16,22 @@ class TestCreateChunkMetadata: def test_validates_missing_keys(self): with pytest.raises(ValueError, match="Missing required keys"): - create_chunk_metadata(ParquetFileChunkMetadata, chunk_idx=0) + create_chunk_metadata(ParquetRowGroupChunkMetadata, row_group_ids=(0,)) def test_validates_unexpected_keys(self): with pytest.raises(ValueError, match="Unexpected keys"): create_chunk_metadata( - ParquetFileChunkMetadata, - chunk_idx=0, - total_num_chunks=1, + ParquetRowGroupChunkMetadata, + row_group_ids=(0,), + num_rows=1, extra_field="boom", ) def test_returns_dict_with_keys(self): md = create_chunk_metadata( - ParquetFileChunkMetadata, chunk_idx=2, total_num_chunks=5 + ParquetRowGroupChunkMetadata, row_group_ids=(0, 1), num_rows=5 ) - assert md == {"chunk_idx": 2, "total_num_chunks": 5} + assert md == {"row_group_ids": (0, 1), "num_rows": 5} class TestWholeFileChunker: @@ -63,74 +62,17 @@ def test_compressed_file_yields_whole(self): assert chunks == [(None, 1024)] -class TestParquetFileChunker: - def test_small_file_yields_whole(self): - chunker = ParquetFileChunker(target_chunk_size=256 * 1024 * 1024) - chunks = list( - chunker.generate_chunk_metadatas("data.parquet", 100 * 1024 * 1024) - ) - assert chunks == [(None, 100 * 1024 * 1024)] - - def test_at_target_yields_whole(self): - chunker = ParquetFileChunker(target_chunk_size=256 * 1024 * 1024) - chunks = list( - chunker.generate_chunk_metadatas("data.parquet", 256 * 1024 * 1024) - ) - assert chunks == [(None, 256 * 1024 * 1024)] - - @pytest.mark.parametrize( - "file_size,expected_num_chunks", - [ - (257 * 1024 * 1024, 2), - (300 * 1024 * 1024, 2), - (512 * 1024 * 1024, 2), - (600 * 1024 * 1024, 3), - (1024 * 1024 * 1024, 4), - ], - ) - def test_large_files_produce_chunks(self, file_size, expected_num_chunks): - target_chunk_size = 256 * 1024 * 1024 - chunker = ParquetFileChunker(target_chunk_size=target_chunk_size) - chunks = list(chunker.generate_chunk_metadatas("data.parquet", file_size)) - assert len(chunks) == expected_num_chunks - total_size = 0 - for i, (md, chunk_size) in enumerate(chunks): - assert isinstance(md, dict) - assert md["chunk_idx"] == i - assert md["total_num_chunks"] == expected_num_chunks - if i < expected_num_chunks - 1: - assert chunk_size == target_chunk_size - else: - assert chunk_size == file_size - target_chunk_size * i - total_size += chunk_size - assert total_size == file_size - - def test_default_target_chunk_size_from_context(self, restore_data_context): - from ray.data.context import DataContext - - DataContext.get_current().parquet_chunker_target_chunk_size = 1024 - chunker = ParquetFileChunker() - assert chunker._target_chunk_size == 1024 - - def test_ctor_arg_takes_precedence_over_context(self, restore_data_context): - from ray.data.context import DataContext - - DataContext.get_current().parquet_chunker_target_chunk_size = 1024 - chunker = ParquetFileChunker(target_chunk_size=2048) - assert chunker._target_chunk_size == 2048 - - def test_chunk_metadata_subclasses_are_typeddicts(): # Ensures the subclasses don't accidentally inherit unrelated keys. pmd: ChunkMetadata = create_chunk_metadata( - ParquetFileChunkMetadata, chunk_idx=0, total_num_chunks=1 + ParquetRowGroupChunkMetadata, row_group_ids=(0,), num_rows=1 ) lmd: ChunkMetadata = create_chunk_metadata( LineDelimitedFileChunkMetadata, chunk_byte_start_idx=0, chunk_byte_end_idx=10, ) - assert set(pmd.keys()) == {"chunk_idx", "total_num_chunks"} + assert set(pmd.keys()) == {"row_group_ids", "num_rows"} assert set(lmd.keys()) == {"chunk_byte_start_idx", "chunk_byte_end_idx"} diff --git a/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py b/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py index e8e0dc328f2d..2847cad37d43 100644 --- a/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py +++ b/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py @@ -6,7 +6,6 @@ from ray.data._internal.datasource_v2.chunkers.file_chunker import ( LineDelimitedFileChunker, - ParquetFileChunker, WholeFileChunker, ) from ray.data._internal.datasource_v2.listing.file_indexer import ( @@ -211,7 +210,7 @@ def test_default_uses_whole_file_chunker(self): assert isinstance(indexer.file_chunker, WholeFileChunker) def test_explicit_chunker_is_exposed(self): - chunker = ParquetFileChunker(target_chunk_size=1024) + chunker = LineDelimitedFileChunker() indexer = NonSamplingFileIndexer( ignore_missing_paths=False, file_chunker=chunker ) @@ -229,29 +228,6 @@ def test_whole_file_chunker_yields_none_chunk_metadata(self, tmp_path): assert list(manifest.file_chunk_metadatas) == [None] assert list(manifest.file_sizes) == [100] - def test_parquet_chunker_splits_large_file_into_many_chunks(self, tmp_path): - # Write a "Parquet" file by name only — the chunker doesn't open it. - (tmp_path / "big.parquet").write_bytes(b"x" * 10_000) - chunker = ParquetFileChunker(target_chunk_size=1024) - indexer = NonSamplingFileIndexer( - ignore_missing_paths=False, - num_workers=1, - file_chunker=chunker, - ) - fs = LocalFileSystem() - manifests = list(indexer.list_files(pa.array([str(tmp_path)]), filesystem=fs)) - rows = [] - for m in manifests: - for path, size, md in zip(m.paths, m.file_sizes, m.file_chunk_metadatas): - rows.append((str(path), int(size), md)) - - # 10000 bytes / 1024 target chunk size -> 10 chunks (ceil). - assert len(rows) == 10 - for i, (_, _, md) in enumerate(rows): - assert md is not None - assert md["chunk_idx"] == i - assert md["total_num_chunks"] == 10 - def test_line_delimited_chunker_byte_ranges(self, tmp_path): (tmp_path / "a.jsonl").write_bytes(b"x" * 10_000) chunker = LineDelimitedFileChunker() From d10db62ae046cca66911112255f97701d3738f8a Mon Sep 17 00:00:00 2001 From: Goutam Date: Thu, 23 Jul 2026 23:27:26 -0700 Subject: [PATCH 002/135] [Data] Push limit into ListFiles when Limit sits directly on ReadFiles LimitPushdownRule._push_limit_down returned early ("no row-preserving ops") when a Limit was directly above ReadFiles, so it never applied the per-block limit -> the scanner limit and (footer path) ListFiles.limit were left unset. The footer indexer then read every file's footer regardless of the limit. Push the per-block limit into a directly-attached ReadFiles (keeping the Limit on top for exact enforcement), which also mirrors the limit onto ListFiles via sync_list_files_pushdown so the footer indexer stops listing early. Scoped to ReadFiles to keep other sources unchanged. read_parquet(s3://...).limit(10_000) on a 260-file dataset: ~9.8s -> ~3.1s. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Goutam --- .../data/_internal/logical/rules/limit_pushdown.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/python/ray/data/_internal/logical/rules/limit_pushdown.py b/python/ray/data/_internal/logical/rules/limit_pushdown.py index 1b2cb062cf4d..6119ef64c116 100644 --- a/python/ray/data/_internal/logical/rules/limit_pushdown.py +++ b/python/ray/data/_internal/logical/rules/limit_pushdown.py @@ -196,8 +196,18 @@ def _push_limit_down(self, limit_op: Limit) -> LogicalOperator: num_rows_preserving_ops.append(current_op) current_op = current_op.input_dependencies[0] - # If we couldn't push through any operators, return original + # If we couldn't push through any operators, the Limit sits directly on + # its input. For a V2 ``ReadFiles`` source we still push a per-block limit + # into it (and mirror the limit onto the upstream ``ListFiles`` so a + # footer-based indexer can stop listing early), keeping the ``Limit`` on + # top for exact enforcement. Other ops are left untouched. if not num_rows_preserving_ops: + if isinstance(current_op, ReadFiles): + limit_input = self._apply_per_block_limit_if_supported( + current_op, limit_op.limit + ) + if limit_input is not current_op: + return Limit(limit_op.limit, input_dependencies=[limit_input]) return limit_op # Apply per-block limit to the deepest operator if it supports it limit_input = self._apply_per_block_limit_if_supported( From b4549c7545a996ff0e9b7a23b96f38c20b6bca9d Mon Sep 17 00:00:00 2001 From: Goutam Date: Fri, 24 Jul 2026 09:38:43 -0700 Subject: [PATCH 003/135] [Data] Refine footer-chunking Parquet V2 read path Follow-up refinements on the footer-based row-group chunking path: - Carry projection-scoped uncompressed_size on ParquetRowGroupChunkMetadata so the reader sizes batches from footer stats ListFiles already read, instead of re-reading the footer in the read task. - Read the exact physical row groups a bin assigned via explicit row_group_ids fragments (_fragments_from_row_group_ids), scanning a file's groups together unless row hashing needs per-group offsets. - Size Arrow's process-wide IO/CPU thread pools per read task so a scan can issue many concurrent column/range fetches against S3 (RAY_DATA_PARQUET_READER_IO_THREAD_COUNT / _CPU_COUNT). - Add RAY_DATA_PARQUET_FOOTER_MAX_INFLIGHT_BATCHES to bound the in-flight footer-batch window independently of actor count. - Use a fixed fallback bin budget (RAY_DATA_PARQUET_FOOTER_BIN_BYTES, default 1 GiB) for read-task packing. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Goutam --- .../datasource_v2/chunkers/file_chunker.py | 5 +- .../listing/footer_file_indexer.py | 22 +++-- .../datasource_v2/listing/footer_reader.py | 16 ---- .../partitioners/online_bin_packer.py | 1 + .../datasource_v2/readers/file_reader.py | 17 ++-- .../readers/parquet_file_reader.py | 90 ++++++++++++++++--- .../tests/test_parquet_datasource_v2.py | 3 + .../unit/datasource_v2/test_file_chunker.py | 19 +++- 8 files changed, 121 insertions(+), 52 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py b/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py index 0b7933d76ed7..a592f4693d6c 100644 --- a/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py +++ b/python/ray/data/_internal/datasource_v2/chunkers/file_chunker.py @@ -65,11 +65,14 @@ class ParquetRowGroupChunkMetadata(ChunkMetadata): ``row_group_ids`` are physical row-group indices into the file; any coalescing/splitting the bin packer applied is already expanded away here. ``num_rows`` is the summed footer row count of those groups (for sizing / - limit accounting). + limit accounting). ``uncompressed_size`` is their summed, projection-scoped + uncompressed byte size, carried so the reader can size batches without + re-reading the footer ``ListFiles`` already read. """ row_group_ids: Tuple[int, ...] num_rows: int + uncompressed_size: int @DeveloperAPI diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py index e46cf9cd0b2b..22028056c658 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py @@ -36,6 +36,12 @@ # Files per ``read_footers`` call. Small footers -> batch several per task to # amortize the per-task and per-result object-store overhead. _DEFAULT_BATCH_SIZE = env_integer("RAY_DATA_PARQUET_FOOTER_BATCH_SIZE", 10) +# Max in-flight footer batches. ``0`` -> auto (``num_actors * 2``). A smaller +# window reads fewer footers before an early ``limit`` stop cancels the pool, at +# the cost of less pipelining on full reads. +_DEFAULT_MAX_INFLIGHT_BATCHES = env_integer( + "RAY_DATA_PARQUET_FOOTER_MAX_INFLIGHT_BATCHES", 0 +) # Fallback bin budget (uncompressed bytes per read task) when # ``target_max_block_size`` is unset. _DEFAULT_BIN_BYTES = env_integer("RAY_DATA_PARQUET_FOOTER_BIN_BYTES", 1 * GiB) @@ -60,6 +66,7 @@ def __init__( num_actors: Optional[int] = None, io_concurrency: Optional[int] = None, footer_batch_size: Optional[int] = None, + max_inflight_batches: Optional[int] = None, max_shared_open_bins: int = 16, ): super().__init__( @@ -76,6 +83,13 @@ def __init__( self._footer_batch_size = ( footer_batch_size if footer_batch_size is not None else _DEFAULT_BATCH_SIZE ) + # In-flight footer-batch window; 0/None -> auto (``num_actors * 2``). + _inflight = ( + max_inflight_batches + if max_inflight_batches is not None + else _DEFAULT_MAX_INFLIGHT_BATCHES + ) + self._max_inflight_batches = _inflight if _inflight else self._num_actors * 2 self._max_shared_open_bins = max_shared_open_bins @property @@ -95,11 +109,7 @@ def list_files( limit: Optional[int] = None, projected_columns: Optional[List[str]] = None, ) -> Iterable[FileManifest]: - from ray.data.context import DataContext - - max_bin_bytes = ( - DataContext.get_current().target_max_block_size or _DEFAULT_BIN_BYTES - ) + max_bin_bytes = _DEFAULT_BIN_BYTES file_infos = self.list_file_infos( paths, filesystem=filesystem, @@ -141,7 +151,7 @@ def _read_and_pack( ) # Bound the number of in-flight footer batches so listing stays roughly # demand-driven (matters under a limit) and memory stays flat. - window = max(1, self._num_actors * 2) + window = max(1, self._max_inflight_batches) batches = self._batches(file_infos) # FIFO of in-flight streaming generators, one per dispatched footer batch. pending: Deque[ray.ObjectRefGenerator] = deque() diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py index 36a5479a8c29..8994649f441b 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py @@ -1,19 +1,3 @@ -"""``FooterReader`` Ray actor for the footer-based Parquet chunking path. - -Reads Parquet footers on a pool of actors (spread across the cluster) and turns -each file into a small :class:`FileChunks` descriptor of its row groups, applying -predicate-based row-group pruning and projection-aware byte accounting close to -the footer read. Reading *and* chunking happen in the same place so the large -``FileMetaData`` (tens of KB to several MB) never crosses a process boundary -- -only the tiny ``FileChunks`` result is serialized back to the driver. - -Ported from the ``reader_bin_packing`` prototype -(``worktree-binpacker-split`` branch, ``list_files.py``), adapted to Ray Data: -takes a resolved PyArrow filesystem (instead of an S3 region), uses stdlib -logging, and exposes ``read_footers`` as a plain synchronous streaming generator -(IO concurrency comes from an internal thread pool, not asyncio). -""" - from __future__ import annotations import logging diff --git a/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py index 567872370c23..940930d34fcf 100644 --- a/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py +++ b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py @@ -272,6 +272,7 @@ def _bin_to_manifest(bin_: Bin) -> FileManifest: ParquetRowGroupChunkMetadata, row_group_ids=tuple(sorted(ids)), num_rows=rows_by_path[path], + uncompressed_size=size_by_path[path], ) ) return FileManifest.construct_manifest(paths, sizes, chunk_metadatas) diff --git a/python/ray/data/_internal/datasource_v2/readers/file_reader.py b/python/ray/data/_internal/datasource_v2/readers/file_reader.py index b78fc5a8eb4b..479cfc9c1d71 100644 --- a/python/ray/data/_internal/datasource_v2/readers/file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/file_reader.py @@ -35,14 +35,6 @@ "RAY_DATA_ARROW_SCANNER_BATCH_READAHEAD", 8 ) -# Number of worker threads used to read fragments concurrently per task. -# Defaults to 4 to overlap remote-filesystem I/O latency across multiple -# fragments. ``_read_fragment_batches`` caps this to ``len(fragments)`` -# at runtime so single-fragment tasks don't spin up extra workers, and -# falls back to the sequential path entirely when -# ``DataContext.execution_options.preserve_order`` is set. -_DEFAULT_NUM_THREADS = env_integer("RAY_DATA_READ_FILES_NUM_THREADS", 4) - ROW_HASH_COLUMN_NAME = "row_hash" @@ -247,7 +239,7 @@ def read(self, input_split: FileManifest) -> Iterator[pa.Table]: "filter": ( self._predicate.to_pyarrow() if self._predicate is not None else None ), - "batch_size": self._resolve_batch_size(dataset), + "batch_size": self._resolve_batch_size(dataset, input_split), "batch_readahead": _ARROW_SCANNER_BATCH_READAHEAD, } scanner_kwargs.update(self._arrow_scanner_kwargs()) @@ -326,10 +318,11 @@ def read(self, input_split: FileManifest) -> Iterator[pa.Table]: rows_read += len(table) yield table - def _resolve_batch_size(self, dataset: pds.Dataset) -> int: + def _resolve_batch_size(self, dataset: pds.Dataset, manifest: FileManifest) -> int: """Return the batch size to use for scanning. - Subclasses can override this to implement adaptive batch sizing. + Subclasses can override this to implement adaptive batch sizing, using + the ``manifest`` (e.g. footer-derived per-chunk stats) to avoid re-I/O. """ return self._batch_size @@ -433,7 +426,7 @@ def _read_fragment_batches( if not fragments_with_offsets: return - num_workers = min(_DEFAULT_NUM_THREADS, len(fragments_with_offsets)) + num_workers = len(fragments_with_offsets) if num_workers <= 1 or ctx.execution_options.preserve_order: yield from self._read_fragments_sequential( iter(fragments_with_offsets), scanner_kwargs diff --git a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py index b9964c17750f..23d26bd5bcd3 100644 --- a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py @@ -50,6 +50,12 @@ "RAY_DATA_PARQUET_FRAGMENT_BUFFER_SIZE", 8 * MiB ) +# Arrow process-wide IO / CPU thread pools for the read task. Arrow's default +# (~num cores, 8 IO threads) throttles the concurrent column/range fetches a +# Parquet scan issues against S3, especially for row-group-scoped fragments. +_READER_IO_THREAD_COUNT = env_integer("RAY_DATA_PARQUET_READER_IO_THREAD_COUNT", 128) +_READER_CPU_COUNT = env_integer("RAY_DATA_PARQUET_READER_CPU_COUNT", 128) + def _estimate_batch_size_from_metadata( fragment: pds.ParquetFileFragment, @@ -140,6 +146,32 @@ def _estimate_batch_size_from_metadata( return target_batch_size +def _estimate_batch_size_from_chunk_stats( + uncompressed_size: int, + num_rows: int, + target_block_size: int, +) -> Optional[int]: + """Estimate batch size from footer-derived chunk stats, without any I/O. + + ``ListFiles`` already read each file's footer and recorded the + projection-scoped uncompressed byte size and row count of the row groups it + assigned to this chunk (:class:`ParquetRowGroupChunkMetadata`). Sizing from + those avoids the extra footer read that + :func:`_estimate_batch_size_from_metadata` incurs. Mirrors that function's + math but over the whole chunk (its row-group average) rather than the first + row group; the estimate is refined from real data after the first batch. + """ + if num_rows <= 0 or uncompressed_size <= 0: + return None + estimated_in_mem_row_size = ( + uncompressed_size * PARQUET_ENCODING_RATIO_ESTIMATE_DEFAULT / num_rows + ) + if estimated_in_mem_row_size == 0: + return None + # Never request more rows than the chunk actually contains. + return min(math.ceil(target_block_size / estimated_in_mem_row_size), num_rows) + + @DeveloperAPI class ParquetFileReader(FileReader, SupportsMetadata): """Parquet-specific file reader with adaptive batch sizing. @@ -225,13 +257,20 @@ def __init__( self._sampled_batch_size: int | object = ( _UNSET # pyrefly: ignore[bad-assignment] ) + # Size Arrow's process-wide IO/CPU pools for the read task so a Parquet + # scan can issue many concurrent column/range fetches against S3 instead + # of being capped at Arrow's small default. + if _READER_IO_THREAD_COUNT > 0: + pa.set_io_thread_count(_READER_IO_THREAD_COUNT) + if _READER_CPU_COUNT > 0: + pa.set_cpu_count(_READER_CPU_COUNT) @override def _make_format(self) -> pds.ParquetFileFormat: return pds.ParquetFileFormat(**self._parquet_format_kwargs) @override - def _resolve_batch_size(self, dataset: pds.Dataset) -> int: + def _resolve_batch_size(self, dataset: pds.Dataset, manifest: FileManifest) -> int: """Determine batch size from explicit setting, metadata, or default. Priority: explicit batch_size > sampled estimate > metadata estimate > default. @@ -240,6 +279,12 @@ def _resolve_batch_size(self, dataset: pds.Dataset) -> int: through to the metadata estimate and seed ``_sampled_batch_size`` with the result. ``_on_batch_read`` later refines it from actual data, and subsequent ``read()`` calls on the same instance use the refined value. + + The metadata estimate prefers the footer-derived stats ``ListFiles`` + already recorded on the manifest (:class:`ParquetRowGroupChunkMetadata`), + so the common footer-chunking path sizes batches without re-reading the + footer. It falls back to reading the first fragment's metadata only when + the manifest carries no such stats (e.g. the whole-file path). """ if self._explicit_batch_size is not None: return self._explicit_batch_size @@ -249,22 +294,41 @@ def _resolve_batch_size(self, dataset: pds.Dataset) -> int: batch_size = _ARROW_DEFAULT_BATCH_SIZE if self._target_block_size is not None: - first_fragment = next(dataset.get_fragments(), None) - if first_fragment is not None: - estimated = _estimate_batch_size_from_metadata( - first_fragment, self._columns, self._target_block_size + estimated = self._estimate_batch_size(dataset, manifest) + if estimated is not None: + logger.debug( + "Estimated Parquet batch size: %d rows (target_block_size=%d)", + estimated, + self._target_block_size, ) - if estimated is not None: - logger.debug( - "Estimated Parquet batch size: %d rows (target_block_size=%d)", - estimated, - self._target_block_size, - ) - batch_size = estimated + batch_size = estimated self._sampled_batch_size = batch_size return batch_size + def _estimate_batch_size( + self, dataset: pds.Dataset, manifest: FileManifest + ) -> Optional[int]: + assert self._target_block_size is not None + # Prefer footer stats already on the manifest; fall back to a footer read. + chunk = next( + (md for md in manifest.file_chunk_metadatas if md is not None), None + ) + if chunk is not None and "uncompressed_size" in chunk: + estimated = _estimate_batch_size_from_chunk_stats( + chunk["uncompressed_size"], + chunk["num_rows"], + self._target_block_size, + ) + if estimated is not None: + return estimated + first_fragment = next(dataset.get_fragments(), None) + if first_fragment is None: + return None + return _estimate_batch_size_from_metadata( + first_fragment, self._columns, self._target_block_size + ) + @override def _on_batch_read(self, table: pa.Table) -> None: """Refine batch size estimate from actual in-memory data.""" @@ -307,7 +371,7 @@ def _get_fragments_to_read( } fragments: List[Tuple[pds.Fragment, int]] = [] for path, chunk_metadata in zip(manifest.paths, manifest.file_chunk_metadatas): - fragment = path_to_fragment[path] + fragment: pds.ParquetFileFragment = path_to_fragment[path] if chunk_metadata is None: fragments.append((fragment, 0)) else: diff --git a/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py b/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py index b5b6a52cb75d..ccc8fe0edbbf 100644 --- a/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py +++ b/python/ray/data/_internal/datasource_v2/tests/test_parquet_datasource_v2.py @@ -230,6 +230,9 @@ def _row_group_manifest(path, row_group_ids, num_rows): ParquetRowGroupChunkMetadata, row_group_ids=tuple(row_group_ids), num_rows=num_rows, + # Nominal projected uncompressed size (8-byte int64 ids); only + # used for footer-free batch sizing, not row selection. + uncompressed_size=num_rows * 8, ) ], ) diff --git a/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py b/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py index ee610a17e920..8ae1b288ab65 100644 --- a/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py +++ b/python/ray/data/tests/unit/datasource_v2/test_file_chunker.py @@ -24,14 +24,22 @@ def test_validates_unexpected_keys(self): ParquetRowGroupChunkMetadata, row_group_ids=(0,), num_rows=1, + uncompressed_size=10, extra_field="boom", ) def test_returns_dict_with_keys(self): md = create_chunk_metadata( - ParquetRowGroupChunkMetadata, row_group_ids=(0, 1), num_rows=5 + ParquetRowGroupChunkMetadata, + row_group_ids=(0, 1), + num_rows=5, + uncompressed_size=10, ) - assert md == {"row_group_ids": (0, 1), "num_rows": 5} + assert md == { + "row_group_ids": (0, 1), + "num_rows": 5, + "uncompressed_size": 10, + } class TestWholeFileChunker: @@ -65,14 +73,17 @@ def test_compressed_file_yields_whole(self): def test_chunk_metadata_subclasses_are_typeddicts(): # Ensures the subclasses don't accidentally inherit unrelated keys. pmd: ChunkMetadata = create_chunk_metadata( - ParquetRowGroupChunkMetadata, row_group_ids=(0,), num_rows=1 + ParquetRowGroupChunkMetadata, + row_group_ids=(0,), + num_rows=1, + uncompressed_size=10, ) lmd: ChunkMetadata = create_chunk_metadata( LineDelimitedFileChunkMetadata, chunk_byte_start_idx=0, chunk_byte_end_idx=10, ) - assert set(pmd.keys()) == {"row_group_ids", "num_rows"} + assert set(pmd.keys()) == {"row_group_ids", "num_rows", "uncompressed_size"} assert set(lmd.keys()) == {"chunk_byte_start_idx", "chunk_byte_end_idx"} From e6cf1af4b413868e80405d3c2a0b930627785831 Mon Sep 17 00:00:00 2001 From: Goutam Date: Fri, 24 Jul 2026 10:03:46 -0700 Subject: [PATCH 004/135] [Data] Seal and evict full shared bins in OnlineBinPacker A shared bin at or over cap can never accept another positive-size item, so leaving it in the pool just burns one of the max_shared_open_bins slots and delays draining. Seal and evict it immediately from both the whole-item fast path and the best-fit split loop. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Goutam --- .../datasource_v2/partitioners/online_bin_packer.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py index 940930d34fcf..7a810c7132f3 100644 --- a/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py +++ b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py @@ -169,6 +169,15 @@ def _place(self, item: BinItem) -> None: else: self._place_heavy(item) + def _seal_if_full(self, bin_: _OpenBin) -> None: + # A shared bin at (or over) cap can never take another positive-size item: + # ``_best_open_bin`` gives it end == start and the whole-item fast path + # fails its ``used_bytes + total <= cap`` test. Leaving it in the pool just + # burns one of the ``_max_shared_open_bins`` slots, so seal and evict it. + if bin_.used_bytes >= self._cap: + self._shared_bins.remove(bin_) + self._output.append(bin_.seal()) + def _place_light(self, item: BinItem) -> None: # LIGHT colour -> shared First-Fit bins. First try to place the WHOLE item # in the first bin it fits. If it fits nowhere, cut it at unit boundaries @@ -184,6 +193,7 @@ def _place_light(self, item: BinItem) -> None: ) if target is not None: target.add(item) + self._seal_if_full(target) return start = 0 while start < len(units): @@ -198,6 +208,7 @@ def _place_light(self, item: BinItem) -> None: # A lone unit larger than a whole bin gets its own (over-sized) bin. end = max(_largest_prefix_fit(prefix, start, cap), start + 1) target.add(_subitem(item, len(units), start, end)) + self._seal_if_full(target) start = end def _place_heavy(self, item: BinItem) -> None: From 26cdef2abc2a2b88f4b8022bf136a5e86de4579d Mon Sep 17 00:00:00 2001 From: Goutam Date: Mon, 27 Jul 2026 01:53:41 -0700 Subject: [PATCH 005/135] [Data] Fix count() pushdown on the Parquet V2 footer read path `PushdownCountFiles` rebuilt `ListFiles` by deep-copying the existing indexer and overwriting its `_file_chunker`. `FooterFileIndexer` subclasses `NonSamplingFileIndexer`, so the `isinstance` assert passed -- but it overrides `list_files` outright and never reads the chunker, so the swap was a silent no-op. The result on `count_parquet_fixed_size` (10k files): listing still footer-swept every file, and because `count()` projects to zero columns every row group measured 0 bytes, so the bin cap was never reached and the whole dataset collapsed into one bin -- one manifest block, one count task that then re-read all 10k footers serially. 30.5s -> 219.8s. Build the plain indexer explicitly via a new `NonSamplingFileIndexer.as_whole_file_indexer()`, and bail out rather than assert when the indexer isn't one (the assert was stripped under -O, which is the same failure mode as this bug). This restores one manifest row per file and parallel count tasks, and removes a latent over-count: the bin packer emits one row per path per bin, so a file spanning bins would have been counted more than once. Adds the first test coverage for the rule, including an exact-type assertion on the rebuilt indexer -- an isinstance check is what let the footer indexer through. Also in this commit: - lower the bin-packing default from 1 GiB to 64 MiB - expose `max_shared_open_bins` via `RAY_DATA_PARQUET_BIN_PACKING_MAX_SHARED_OPEN_BINS` - experiment env vars on the `wide_schema_pipeline` release test - `map_benchmark` reads via V2 instead of pinning V1 Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../datasource_v2/listing/file_indexer.py | 20 +++ .../listing/footer_file_indexer.py | 23 ++- .../logical/rules/pushdown_count_files.py | 44 ++++-- .../tests/datasource/test_read_parquet_v2.py | 131 ++++++++++++++++++ .../unit/datasource_v2/test_file_indexer.py | 61 ++++++++ .../nightly_tests/dataset/map_benchmark.py | 5 +- release/release_data_tests.yaml | 4 + 7 files changed, 263 insertions(+), 25 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py index b22e7d42d76b..c63fdd23c5e4 100644 --- a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py @@ -183,6 +183,26 @@ def file_chunker(self) -> FileChunker: """ return self._file_chunker + def as_whole_file_indexer(self) -> "NonSamplingFileIndexer": + """A plain per-file indexer sharing this one's traversal config. + + Metadata-only consumers (the ``PushdownCountFiles`` rule) need a listing + that emits each file exactly once and does no per-file IO while listing. + Subclasses that override :meth:`list_files` with a metadata-aware + strategy -- e.g. ``FooterFileIndexer``, which footer-reads every file on + an actor pool and bin-packs row groups, emitting one manifest row per + file *per bin* -- would both duplicate that IO and risk emitting a path + more than once. So this deliberately returns a base + ``NonSamplingFileIndexer`` rather than ``type(self)``, carrying over only + the traversal settings. + """ + return NonSamplingFileIndexer( + ignore_missing_paths=self._ignore_missing_paths, + num_workers=self._num_workers, + max_paths_per_output=self._max_paths_per_output, + file_chunker=WholeFileChunker(), + ) + def list_files( self, paths: "BlockColumn", diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py index 22028056c658..c3af0ac04a7b 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py @@ -14,7 +14,7 @@ from ray.data._internal.datasource_v2.partitioners.online_bin_packer import ( OnlineBinPacker, ) -from ray.data._internal.util import GiB +from ray.data._internal.util import MiB if TYPE_CHECKING: from pyarrow.fs import FileSystem @@ -44,7 +44,13 @@ ) # Fallback bin budget (uncompressed bytes per read task) when # ``target_max_block_size`` is unset. -_DEFAULT_BIN_BYTES = env_integer("RAY_DATA_PARQUET_FOOTER_BIN_BYTES", 1 * GiB) +_DEFAULT_BIN_PACKING_BYTES = env_integer("RAY_DATA_PARQUET_BIN_PACKING_BYTES", 64 * MiB) +# Shared (mixed-colour) bins the packer keeps open at once. A wider pool packs +# tighter; a narrower one seals bins sooner, and since each sealed bin becomes a +# read task, that's what lets reads start before every footer has landed. +_DEFAULT_MAX_SHARED_OPEN_BINS = env_integer( + "RAY_DATA_PARQUET_BIN_PACKING_MAX_SHARED_OPEN_BINS", 16 +) class FooterFileIndexer(NonSamplingFileIndexer): @@ -63,11 +69,10 @@ def __init__( max_paths_per_output: Optional[int] = None, coalesce_bytes: int = 0, split_coalesced: bool = False, - num_actors: Optional[int] = None, io_concurrency: Optional[int] = None, footer_batch_size: Optional[int] = None, max_inflight_batches: Optional[int] = None, - max_shared_open_bins: int = 16, + max_shared_open_bins: Optional[int] = None, ): super().__init__( ignore_missing_paths=ignore_missing_paths, @@ -76,7 +81,7 @@ def __init__( ) self._coalesce_bytes = coalesce_bytes self._split_coalesced = split_coalesced - self._num_actors = num_actors if num_actors is not None else _DEFAULT_NUM_ACTORS + self._num_actors = _DEFAULT_NUM_ACTORS self._io_concurrency = ( io_concurrency if io_concurrency is not None else _DEFAULT_IO_CONCURRENCY ) @@ -90,7 +95,11 @@ def __init__( else _DEFAULT_MAX_INFLIGHT_BATCHES ) self._max_inflight_batches = _inflight if _inflight else self._num_actors * 2 - self._max_shared_open_bins = max_shared_open_bins + self._max_shared_open_bins = ( + max_shared_open_bins + if max_shared_open_bins is not None + else _DEFAULT_MAX_SHARED_OPEN_BINS + ) @property def yields_read_units(self) -> bool: @@ -109,7 +118,7 @@ def list_files( limit: Optional[int] = None, projected_columns: Optional[List[str]] = None, ) -> Iterable[FileManifest]: - max_bin_bytes = _DEFAULT_BIN_BYTES + max_bin_bytes = _DEFAULT_BIN_PACKING_BYTES file_infos = self.list_file_infos( paths, filesystem=filesystem, diff --git a/python/ray/data/_internal/logical/rules/pushdown_count_files.py b/python/ray/data/_internal/logical/rules/pushdown_count_files.py index b12c4d0db03a..a2e551c71d25 100644 --- a/python/ray/data/_internal/logical/rules/pushdown_count_files.py +++ b/python/ray/data/_internal/logical/rules/pushdown_count_files.py @@ -1,10 +1,7 @@ -import copy import dataclasses +import logging from typing import TYPE_CHECKING, Optional -from ray.data._internal.datasource_v2.chunkers.file_chunker import ( - WholeFileChunker, -) from ray.data._internal.datasource_v2.listing.file_indexer import ( NonSamplingFileIndexer, ) @@ -27,6 +24,8 @@ if TYPE_CHECKING: import pyarrow as pa +logger = logging.getLogger(__name__) + class PushdownCountFiles(Rule): """Answer ``Dataset.count()`` from file metadata instead of reading data. @@ -39,9 +38,15 @@ class PushdownCountFiles(Rule): Count(ReadFiles(ListFiles)) -> MapBatches(count_rows, ListFiles) ``count_rows`` sums ``read_metadata()`` (e.g. Parquet-footer row counts), - so no data columns are read. The upstream ``ListFiles`` is rebuilt to list - each file exactly once (``WholeFileChunker``, no partitioner) so footers are - read once, in the parallel count pass rather than during listing. + so no data columns are read. The upstream ``ListFiles`` is rebuilt with a + plain whole-file indexer and no partitioner, so (a) each file appears in + exactly one manifest row -- no over-counting -- and (b) listing does no + metadata IO of its own: footers are read once, in the parallel count pass. + + Note this *replaces* metadata-aware indexers such as the footer-based + Parquet one, rather than reconfiguring them: those override ``list_files`` + outright, so reconfiguring is a silent no-op and they would footer-sweep + every file during listing and pack them into a single read unit. """ # Default CPU allocation per task is 1; lower it so at least 2 footer-read @@ -91,16 +96,27 @@ def apply(self, plan: LogicalPlan) -> LogicalPlan: # pyrefly: ignore[bad-overri assert isinstance(list_files, ListFiles), list_files # Rebuild ``ListFiles`` to list each file exactly once: disable - # partitioning and use the ``WholeFileChunker`` (otherwise a file could - # appear once per chunk, in different batches, and be over-counted). - # ``ListFiles`` is frozen, so ``replace`` a copy with a fresh indexer. - count_indexer = copy.deepcopy(list_files.file_indexer) - assert isinstance(count_indexer, NonSamplingFileIndexer), type(count_indexer) - count_indexer._file_chunker = WholeFileChunker() + # partitioning and swap in a plain whole-file indexer. Mutating the + # existing indexer's chunker isn't enough -- a metadata-aware indexer + # (e.g. the footer-based Parquet one) overrides ``list_files`` outright + # and ignores its chunker, so it would keep footer-sweeping during + # listing and could emit a path once per bin, over-counting it. + base_indexer = list_files.file_indexer + if not isinstance(base_indexer, NonSamplingFileIndexer): + # A third-party indexer may chunk files or do its own metadata IO; + # we can't prove one-row-per-file, so leave the plan alone and let + # ``count()`` fall back to the regular read path. + logger.debug( + "Skipping count pushdown: %s is not a NonSamplingFileIndexer", + type(base_indexer).__name__, + ) + return plan + + # ``ListFiles`` is frozen, so ``replace`` it with a fresh indexer. list_files = dataclasses.replace( list_files, file_partitioner=None, - file_indexer=count_indexer, + file_indexer=base_indexer.as_whole_file_indexer(), ) # ``reader`` is narrowed to ``SupportsMetadata`` by the guard above, but diff --git a/python/ray/data/tests/datasource/test_read_parquet_v2.py b/python/ray/data/tests/datasource/test_read_parquet_v2.py index 639d6a06a97e..1d700d56e1ec 100644 --- a/python/ray/data/tests/datasource/test_read_parquet_v2.py +++ b/python/ray/data/tests/datasource/test_read_parquet_v2.py @@ -143,6 +143,137 @@ def test_read_parquet_v2_uses_footer_indexer_without_partitioner(tmp_path, resto assert restore_ctx.read_op_min_num_blocks == original +def _write_row_groups(path, *, num_files, rows_per_file, row_group_size): + """Write ``num_files`` parquet files, each split into several row groups.""" + for i in range(num_files): + pq.write_table( + pa.table({"a": list(range(rows_per_file))}), + str(path / f"f{i}.parquet"), + row_group_size=row_group_size, + ) + + +def _optimized_count_plan(ds): + """The plan ``Dataset.count()`` executes, without executing it. + + ``Dataset.count()`` builds this internally and never exposes it, so tests + reconstruct it to assert on the optimizer's output. + """ + from ray.data._internal.logical.interfaces import LogicalPlan + from ray.data._internal.logical.operators.count_operator import Count + from ray.data._internal.logical.operators.map_operator import Project + from ray.data._internal.logical.optimizers import LogicalOptimizer + + count_op = Count( + input_dependencies=[ + Project(exprs=[], input_dependencies=[ds._logical_plan.dag]) + ] + ) + return LogicalOptimizer().optimize(LogicalPlan(count_op, ds.context)) + + +def _walk(op): + yield op + for child in op.input_dependencies: + yield from _walk(child) + + +def test_count_pushdown_replaces_footer_indexer(tmp_path, restore_ctx): + """``count()`` must not run the footer indexer. + + ``FooterFileIndexer`` subclasses ``NonSamplingFileIndexer`` but overrides + ``list_files``, so it footer-sweeps every file during listing and bin-packs + them into read units -- for a zero-column count projection every row group + measures 0 bytes, collapsing the whole dataset into a single manifest and + therefore a single count task. + """ + from ray.data._internal.datasource_v2.chunkers.file_chunker import WholeFileChunker + from ray.data._internal.datasource_v2.listing.file_indexer import ( + NonSamplingFileIndexer, + ) + from ray.data._internal.logical.operators.map_operator import MapBatches + + _write(tmp_path / "data.parquet", pa.table({"a": [1, 2, 3]})) + + restore_ctx.use_datasource_v2 = True + ds = ray.data.read_parquet(str(tmp_path)) + assert isinstance( + ds._logical_plan.dag.input_dependencies[0].file_indexer, FooterFileIndexer + ) + + dag = _optimized_count_plan(ds).dag + + assert isinstance(dag, MapBatches) + assert not any(isinstance(op, ReadFiles) for op in _walk(dag)) + + (list_files_op,) = [op for op in _walk(dag) if isinstance(op, ListFiles)] + # Exact type: an ``isinstance`` check is precisely what let the footer + # indexer through before. + assert type(list_files_op.file_indexer) is NonSamplingFileIndexer + assert isinstance(list_files_op.file_indexer.file_chunker, WholeFileChunker) + assert list_files_op.file_partitioner is None + + +@pytest.mark.parametrize( + "read_kwargs", [{}, {"include_paths": True}], ids=["plain", "include_paths"] +) +def test_count_pushdown_preserves_list_files_fields(tmp_path, restore_ctx, read_kwargs): + _write(tmp_path / "data.parquet", pa.table({"a": [1, 2, 3]})) + + restore_ctx.use_datasource_v2 = True + ds = ray.data.read_parquet(str(tmp_path), **read_kwargs) + original = ds._logical_plan.dag.input_dependencies[0] + + (rebuilt,) = [ + op for op in _walk(_optimized_count_plan(ds).dag) if isinstance(op, ListFiles) + ] + + assert rebuilt.paths == original.paths + assert rebuilt.source_paths == original.source_paths + assert rebuilt.file_extensions == original.file_extensions + assert rebuilt.partition_filter is original.partition_filter + + +@pytest.mark.parametrize("case", ["predicate", "limit"]) +def test_count_pushdown_declines_row_reducing_reads(tmp_path, restore_ctx, case): + """A row-reducing pushdown makes footer ``num_rows`` an overcount.""" + from ray.data.expressions import col + + _write(tmp_path / "data.parquet", pa.table({"a": [1, 2, 3, 4]})) + + restore_ctx.use_datasource_v2 = True + ds = ray.data.read_parquet(str(tmp_path)) + ds = ds.filter(expr=col("a") > 2) if case == "predicate" else ds.limit(2) + + assert any(isinstance(op, ReadFiles) for op in _walk(_optimized_count_plan(ds).dag)) + + +@pytest.mark.parametrize( + "num_files,rows_per_file,row_group_size", + [(1, 10, None), (3, 100, 10), (4, 1000, 250)], + ids=["single_file", "multi_file_many_row_groups", "multi_file_large"], +) +def test_count_matches_rows( + tmp_path, restore_ctx, num_files, rows_per_file, row_group_size +): + """End-to-end count correctness, including multi-row-group files. + + Regression guard for over-counting: the bin packer emits one manifest row + per path *per bin*, so a file whose row groups span bins would otherwise be + counted once per bin. + """ + _write_row_groups( + tmp_path, + num_files=num_files, + rows_per_file=rows_per_file, + row_group_size=row_group_size, + ) + + restore_ctx.use_datasource_v2 = True + + assert ray.data.read_parquet(str(tmp_path)).count() == num_files * rows_per_file + + def test_read_parquet_v2_filter_raises(tmp_path, restore_ctx): import pyarrow.dataset as pds diff --git a/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py b/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py index 2847cad37d43..ead8c41475b2 100644 --- a/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py +++ b/python/ray/data/tests/unit/datasource_v2/test_file_indexer.py @@ -251,6 +251,67 @@ def test_line_delimited_chunker_byte_ranges(self, tmp_path): assert rows[-1][2]["chunk_byte_end_idx"] == 10_000 +class TestAsWholeFileIndexer: + """``as_whole_file_indexer`` must downgrade to a plain per-file lister. + + ``PushdownCountFiles`` relies on this to count each file exactly once + without triggering a metadata-aware subclass's listing strategy. + """ + + def test_returns_base_type_from_metadata_aware_subclass(self): + from ray.data._internal.datasource_v2.listing.footer_file_indexer import ( + FooterFileIndexer, + ) + + downgraded = FooterFileIndexer( + ignore_missing_paths=False + ).as_whole_file_indexer() + + # Exact type, not isinstance: FooterFileIndexer subclasses + # NonSamplingFileIndexer but overrides list_files, so an isinstance + # check here would not catch a regression. + assert type(downgraded) is NonSamplingFileIndexer + + @pytest.mark.parametrize( + "ignore_missing_paths,num_workers,max_paths_per_output", + [(False, 1, 10), (True, 4, 1000)], + ) + def test_carries_over_traversal_config( + self, ignore_missing_paths, num_workers, max_paths_per_output + ): + source = NonSamplingFileIndexer( + ignore_missing_paths=ignore_missing_paths, + num_workers=num_workers, + max_paths_per_output=max_paths_per_output, + ) + + downgraded = source.as_whole_file_indexer() + + assert downgraded._ignore_missing_paths == ignore_missing_paths + assert downgraded._num_workers == num_workers + assert downgraded._max_paths_per_output == max_paths_per_output + # Derived in __init__, so rebuilding must recompute it rather than + # copying a stale value. + assert downgraded._queue_size_per_thread == max_paths_per_output * 4 + + def test_always_uses_whole_file_chunker(self): + source = NonSamplingFileIndexer( + ignore_missing_paths=False, file_chunker=LineDelimitedFileChunker() + ) + + assert isinstance(source.as_whole_file_indexer().file_chunker, WholeFileChunker) + + def test_source_indexer_is_not_mutated(self): + source = NonSamplingFileIndexer( + ignore_missing_paths=False, file_chunker=LineDelimitedFileChunker() + ) + + source.as_whole_file_indexer() + + # Guards against regressing to in-place mutation of the caller's indexer. + assert isinstance(source.file_chunker, LineDelimitedFileChunker) + + if __name__ == "__main__": import sys diff --git a/release/nightly_tests/dataset/map_benchmark.py b/release/nightly_tests/dataset/map_benchmark.py index b31033c92078..31fea50f0968 100644 --- a/release/nightly_tests/dataset/map_benchmark.py +++ b/release/nightly_tests/dataset/map_benchmark.py @@ -111,10 +111,7 @@ def apply_map_batches(ds): ) def benchmark_fn(): - ctx = ray.data.DataContext.get_current() - ctx.use_datasource_v2 = False - # Use V1 for this benchmark, since V2 is currently spilling - ds = ray.data.read_parquet(path) + ds = ray.data.read_parquet(path, num_cpus=0.99) # Apply the map transformation. if args.api == "map": diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 92eb2a4f4781..873d93dc5f9a 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -304,6 +304,10 @@ - RAYTEST_FAIL_ON_SPILLING=1 # S3 tensor data was written by Ray 2.49-2.54 using cloudpickle. - RAY_DATA_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA=1 + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=39000000 + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=22 + - RAY_DATA_PARQUET_FOOTER_BATCH_SIZE=1 + - RAY_DATA_PARQUET_READER_IO_THREAD_COUNT=5000 cluster_compute: fixed_size_cpu_compute.yaml matrix: From 71a1bf2afe74089364ecb0d61f76f4df127ff469 Mon Sep 17 00:00:00 2001 From: Goutam Date: Mon, 27 Jul 2026 15:09:42 -0700 Subject: [PATCH 006/135] [Data] Parallelize ListFiles for the footer indexer; per-test bin budgets ## Listing parallelism `ListFiles` forced single-task listing whenever the indexer sets `yields_read_units` -- i.e. always, for Parquet V2 -- on the grounds that the bin packer "must see the whole file stream to pack globally". But the V1 partitioner it replaced also runs inside each listing task, so global packing was never the status quo, and the cost is real: a read that hands in explicit paths loses listing parallelism entirely. `distributed_training` passes 200 explicit parquet paths. Master sharded them across 200 listing tasks (3.00s); the footer path did all 200 footer reads in one (5.81s), ~65% of that test's +15% regression, with block count and block size otherwise identical to master. Drop `yields_read_units` from the `should_parallelize` condition. Only the shuffle-RNG case still needs a single task. Reads that pass one directory -- the common case -- shard to one task either way and are unaffected. The footer reader pool is provisioned per `list_files` call, so it is now per listing task rather than cluster-wide. Documented as such on `RAY_DATA_PARQUET_FOOTER_NUM_ACTORS`, and `distributed_training` sets it to 1 since each of its tasks reads a single footer. ## Per-test bin budgets The 64 MiB default is right for some datasets and badly wrong for others, because the useful budget tracks per-file projected bytes -- which ranges from 0.45 MiB to 3.87 GiB across the suite, and varies with the query's projection on the same table. Measured from parquet footers and verified against the V1 partitioner's block counts: - read_large_parquet 4 GiB (3.87 GiB/file; 64 MiB -> 5768 tasks) - write_parquet, joins, 1.25 GiB (~1.17 GiB/file, full schema) aggregate_groups, map_groups - tpch_q20 192 MiB (160 MiB/file, 4-column projection) - streaming_split 36 MiB (V1 landed on ~31 MB blocks here) The map_groups value also fixes four outright failures, not just a slowdown: `map_groups_*_sort_shuffle_pull_based` OOM'd the driver at 64 MiB. Pull-based shuffle holds `input_blocks * output_blocks` object refs on the driver, so at 2500 blocks that is 17.5 GiB (observed 21.6 GiB RSS, cgroup kill). At 1.25 GiB it is ~95 blocks and 0.03 GiB. `wide_schema` gets no budget: those datasets are 10-40 MB total across 9-27 single-row-group files, so every budget from 64 MiB up packs them into one bin. They need a minimum-block-count floor instead. `mix` gets no budget either -- it already matches V1 granularity -- only a narrower reader pool, since it opens 8 datasets over the same 513-file path. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../datasource_v2/listing/file_indexer.py | 3 +- .../listing/footer_file_indexer.py | 11 ++- .../_internal/planner/plan_list_files_op.py | 19 +++-- release/release_data_tests.yaml | 75 ++++++++++++++++++- 4 files changed, 93 insertions(+), 15 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py index c63fdd23c5e4..4abd81e9fca3 100644 --- a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py @@ -42,8 +42,7 @@ def yields_read_units(self) -> bool: manifests that still need size-balanced partitioning downstream. An indexer that bin-packs internally (e.g. the footer-based Parquet indexer, which reads footers and packs row groups into ~one-block manifests) - returns ``True``; ``ListFiles`` then skips the partitioner and runs - listing as a single task so packing sees the whole file stream. + returns ``True``; ``ListFiles`` then skips the partitioner. """ return False diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py index c3af0ac04a7b..f9bb669940ef 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py @@ -28,9 +28,12 @@ logger = logging.getLogger(__name__) -# A pool of footer-reading actors spread across the cluster. Footer reads are -# network-bound, so several actors each driving many concurrent reads keeps IO -# from bottlenecking on a single node. +# Footer-reading actors spread across the cluster, provisioned **per ListFiles +# task**. Footer reads are network-bound, so several actors each driving many +# concurrent reads keeps IO from bottlenecking on a single node. ``ListFiles`` +# shards user-supplied paths across parallel listing tasks, so a read that hands +# in many explicit paths stands up this many actors per shard -- lower it for +# those, rather than assuming it is a cluster-wide total. _DEFAULT_NUM_ACTORS = env_integer("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", 32) _DEFAULT_IO_CONCURRENCY = env_integer("RAY_DATA_PARQUET_FOOTER_IO_CONCURRENCY", 128) # Files per ``read_footers`` call. Small footers -> batch several per task to @@ -104,7 +107,7 @@ def __init__( @property def yields_read_units(self) -> bool: # list_files already emits bin-packed read units, so ListFiles skips the - # partitioner and lists in a single task (global packing + one pool). + # partitioner. Packing is per listing task, not global. return True def list_files( diff --git a/python/ray/data/_internal/planner/plan_list_files_op.py b/python/ray/data/_internal/planner/plan_list_files_op.py index 360bb1a79a41..2271a7b610cd 100644 --- a/python/ray/data/_internal/planner/plan_list_files_op.py +++ b/python/ray/data/_internal/planner/plan_list_files_op.py @@ -71,10 +71,18 @@ def plan_list_files_op( shuffle_config = op.shuffle_config_factory() # Some indexers (e.g. the footer-based Parquet indexer) already emit - # bin-packed read units from ``list_files`` -- they need the whole file - # stream on one task to pack globally, and there's nothing left to partition. + # bin-packed read units from ``list_files``, so there's nothing left for a + # partitioner to do. They still list in parallel: each task bin-packs the + # slice of the path list it was handed, which is the same per-task locality + # a partitioner gets when listing is split. yields_read_units = indexer.yields_read_units + # One task is required only when shuffle needs a single global RNG over the + # whole listing. Note that per-call indexer resources -- the footer indexer's + # reader-actor pool -- are provisioned per listing task, so a read handing in + # many explicit paths should size that pool accordingly. + should_parallelize = shuffle_config is None + transform_fns: List[MapTransformFn] = [ BlockMapTransformFn( partial( @@ -120,12 +128,7 @@ def plan_list_files_op( map_op = MapOperator.create( map_transformer, _create_input_data_buffer( - op, - data_context, - # A single task is required when shuffle needs one global RNG over - # the full listing, or when the indexer bin-packs read units itself - # (it must see the whole file stream to pack globally). - should_parallelize=shuffle_config is None and not yields_read_units, + op, data_context, should_parallelize=should_parallelize ), data_context, name="ListFiles", diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 873d93dc5f9a..8f987cc51b64 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -46,6 +46,13 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + # Files here are ~3.9 GiB uncompressed with ~69 MiB row groups. The + # default bin budget can't fit two row groups, so every one becomes its + # own read task (~5.8k tasks for 103 files). 4 GiB packs a file per bin, + # matching the whole-file granularity the V1 partitioner produced. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=4294967296 cluster_compute: "{{scaling}}_cpu_compute.yaml" matrix: @@ -113,6 +120,13 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + # sf1000 lineitem is read with its full 17-column schema: ~1.16 GiB + # uncompressed per file over 1000 files. 1.25 GiB packs ~one file per + # bin (~943 read tasks vs ~1000 blocks under V1); the default budget + # would produce ~18k tasks. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1342177280 run: timeout: 3600 script: > @@ -201,6 +215,12 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=1 - RAYTEST_FAIL_ON_SPILLING=0 + # ``groupby_benchmark`` reads sf100 lineitem with its full 17-column + # schema: ~1.17 GiB uncompressed per file over 100 files. 1.25 GiB packs + # ~one file per bin (~95 read tasks), matching the whole-file + # granularity of the V1 partitioner. The default budget yields ~2500 + # read tasks, which starves the downstream shuffle. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1342177280 cluster_compute: "{{scaling}}_all_to_all_compute.yaml" run: @@ -228,6 +248,9 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=1 - RAYTEST_FAIL_ON_SPILLING=0 + # Same sf100 lineitem full-schema read as the aggregate variants; see + # the note there for why 1.25 GiB. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1342177280 cluster_compute: "{{scaling}}_all_to_all_compute.yaml" run: @@ -269,6 +292,10 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=1 - RAYTEST_FAIL_ON_SPILLING=0 + # Both sides are read with their full schema: ~1.17 GiB uncompressed + # per lineitem file. 1.25 GiB packs ~one file per bin (~95 read tasks + # vs 100 blocks under V1). + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1342177280 cluster_compute: fixed_size_100_cpu_compute.yaml matrix: @@ -304,7 +331,16 @@ - RAYTEST_FAIL_ON_SPILLING=1 # S3 tensor data was written by Ray 2.49-2.54 using cloudpickle. - RAY_DATA_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA=1 - - RAY_DATA_PARQUET_BIN_PACKING_BYTES=39000000 + # No bin budget override here. These datasets are 10-40 MB in total + # across 9-27 single-row-group files, so every budget from 64 MiB up + # packs them into a single bin -- except `tensors`, whose 37.25 MiB row + # groups already exceed the 64 MiB default's two-per-bin threshold and + # so land one per bin on their own. Splitting `primitives` (0.45 MiB + # per file), `nested_structs` (1.3 MiB) and `objects` (4.2 MiB) needs a + # minimum-block-count floor, not a byte budget. + # + # These datasets are small enough that the footer-reader pool is pure + # startup cost; keep it narrow and spread the few files across it. - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=22 - RAY_DATA_PARQUET_FOOTER_BATCH_SIZE=1 - RAY_DATA_PARQUET_READER_IO_THREAD_COUNT=5000 @@ -328,6 +364,17 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + # imagenet parquet: 7416 single-row-group files of ~8.15 MiB. The V1 + # partitioner sized buckets off a 5x encoding-ratio estimate, which + # over-counts for already-compressed image bytes, so it landed on ~4 + # files (~31 MB) per block. The footer path measures the real bytes, so + # the default budget produces ~66 MB blocks -- 2x coarser. With + # ``equal=True`` the splitter buffers whole blocks, so coarser blocks + # mean more read-ahead is thrown away when the consumers stop. 36 MiB + # reproduces the ~4-files-per-block granularity. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=37748736 run: timeout: 300 wait_for_nodes: @@ -359,6 +406,17 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + # No bin budget override: at the default this dataset (513 single-row- + # group files of ~88 MB) already packs ~one file per bin, matching the + # granularity the V1 partitioner produced. + # + # This benchmark opens 8 datasets over the same path, so the footer + # path costs 8 x 513 footer reads and 8 x 32 reader actors -- work V1 + # never did, and enough to dominate the ~40s `random_mix` variants. + # Narrow the pool; the per-actor IO concurrency still covers 513 files. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=4 cluster_compute: dataset_mixing/compute_8_cpu.yaml run: timeout: 600 @@ -404,6 +462,12 @@ anyscale_sdk_2026: true byod: post_build_script: byod_install_mosaicml.sh + runtime_env: + # This benchmark hands in 200 explicit parquet paths, so ListFiles + # shards them into 200 tasks of one path each. The footer reader pool is + # provisioned per listing task, so the default would stand up 32 actors + # to read a single footer. One actor per task is all this shape needs. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=1 cluster_compute: dataset/multi_node_train_16_workers.yaml run: @@ -1443,6 +1507,15 @@ cluster: anyscale_sdk_2026: true + byod: + runtime_env: + # q20 projects 4 of lineitem's 17 columns -> ~160 MiB uncompressed per + # file. At the default budget that splits each file ~4 ways (400 blocks + # vs the 100 the V1 partitioner produced), and the extra blocks become + # extra shuffle-map tasks feeding HashAggregate. 192 MiB packs one file + # per bin. Per-query value: the same table under q21's 2-column + # projection is only ~92 MiB per file. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=201326592 cluster_compute: "{{scaling}}_all_to_all_compute.yaml" run: From 07c7b968211356749f28c385dfacf4fd96d608e7 Mon Sep 17 00:00:00 2001 From: Goutam Date: Tue, 28 Jul 2026 10:18:52 -0700 Subject: [PATCH 007/135] [Data] Revert ListFiles parallelization; make footer result batching tunable ## Revert: parallel listing for the footer indexer 71a1bf2 dropped `yields_read_units` from `should_parallelize` so a read handing in explicit paths would shard listing across tasks. Release build 102070 shows that was wrong. `FooterFileIndexer.list_files` pays a fixed cost *per call* -- provisioning a reader-actor pool, building a packer, serializing manifests -- so N tasks pay it N times instead of splitting it. On `distributed_training` (200 explicit paths) each of 200 listing tasks took 55.9s, 50.7s of it in block generation, against 5.35s for one task doing all 200. Aggregate listing work went 5.35 -> 11,180 task-seconds. `distributed_training.chaos` went +21% -> +463% vs master; `.regular` +15% -> +28%. Restore the original condition. Parallel listing here needs a pool shared across tasks, not one per task, which is a larger change. ## RAY_DATA_PARQUET_FOOTER_RESULT_BATCH_SIZE `read_footers` has always taken `result_batch_size` to amortize driver-side object-store fetches, but the indexer never passed it, so it defaulted to 1: a directory of N files costs N fetches on the single listing task (7.4k for the imagenet dataset). Plumb it through as an env-backed setting, default 1 so behavior is unchanged. Note it batches *within* one `read_footers` call, so it saturates at `RAY_DATA_PARQUET_FOOTER_BATCH_SIZE`; both have to move together. ## Release test config - `streaming_split`: batch sizes 50/50, cutting driver fetches ~7.4k -> ~149. ListFiles dominates this test (15.5s of a 26.6s run) and its cost tracks results pulled back, not footer IO -- raising the actor pool 32 -> 128 left block generation flat at ~7 ms/block. Bin budget reverted to the default: 36 MiB was matching V1's block size, but V1 only lands on ~31 MB blocks because its 5x encoding estimate over-counts by 5x on image data that does not compress. Matching it doubles the block count and makes the dominant cost worse. - `distributed_training`: footer actors 1 -> 20. 200 paths at a batch size of 10 is 20 batches, so actors past the 20th are never dispatched to. Also carried: `@ray.method(num_returns="streaming")` on `read_footers`, re-reading the actor count at construction so env overrides apply after import, a `None`-size guard in `sample_files`, and `None`-safety in the bin packer's heavy path. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../datasource_v2/listing/file_indexer.py | 3 +- .../listing/footer_file_indexer.py | 37 +++++++++++++------ .../datasource_v2/listing/footer_reader.py | 8 +++- .../datasource_v2/listing/listing_utils.py | 2 + .../partitioners/online_bin_packer.py | 32 ++++++++++------ .../_internal/planner/plan_list_files_op.py | 19 ++++------ .../tests/datasource/test_read_parquet_v2.py | 7 ++-- release/release_data_tests.yaml | 32 +++++++++------- 8 files changed, 87 insertions(+), 53 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py index 4abd81e9fca3..c63fdd23c5e4 100644 --- a/python/ray/data/_internal/datasource_v2/listing/file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/file_indexer.py @@ -42,7 +42,8 @@ def yields_read_units(self) -> bool: manifests that still need size-balanced partitioning downstream. An indexer that bin-packs internally (e.g. the footer-based Parquet indexer, which reads footers and packs row groups into ~one-block manifests) - returns ``True``; ``ListFiles`` then skips the partitioner. + returns ``True``; ``ListFiles`` then skips the partitioner and runs + listing as a single task so packing sees the whole file stream. """ return False diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py index f9bb669940ef..286145b03b12 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py @@ -28,17 +28,18 @@ logger = logging.getLogger(__name__) -# Footer-reading actors spread across the cluster, provisioned **per ListFiles -# task**. Footer reads are network-bound, so several actors each driving many -# concurrent reads keeps IO from bottlenecking on a single node. ``ListFiles`` -# shards user-supplied paths across parallel listing tasks, so a read that hands -# in many explicit paths stands up this many actors per shard -- lower it for -# those, rather than assuming it is a cluster-wide total. +# A pool of footer-reading actors spread across the cluster, provisioned once +# per ``list_files`` call. Footer reads are network-bound, so several actors each +# driving many concurrent reads keeps IO from bottlenecking on a single node. _DEFAULT_NUM_ACTORS = env_integer("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", 32) _DEFAULT_IO_CONCURRENCY = env_integer("RAY_DATA_PARQUET_FOOTER_IO_CONCURRENCY", 128) # Files per ``read_footers`` call. Small footers -> batch several per task to # amortize the per-task and per-result object-store overhead. _DEFAULT_BATCH_SIZE = env_integer("RAY_DATA_PARQUET_FOOTER_BATCH_SIZE", 10) +# ``FileChunks`` per streamed result. The driver pays one object-store fetch per +# yielded list, so a large directory costs one fetch per file at ``1``. Raising +# it trades a little latency-to-first-chunk for far fewer driver-side fetches. +_DEFAULT_RESULT_BATCH_SIZE = env_integer("RAY_DATA_PARQUET_FOOTER_RESULT_BATCH_SIZE", 1) # Max in-flight footer batches. ``0`` -> auto (``num_actors * 2``). A smaller # window reads fewer footers before an early ``limit`` stop cancels the pool, at # the cost of less pipelining on full reads. @@ -74,6 +75,7 @@ def __init__( split_coalesced: bool = False, io_concurrency: Optional[int] = None, footer_batch_size: Optional[int] = None, + result_batch_size: Optional[int] = None, max_inflight_batches: Optional[int] = None, max_shared_open_bins: Optional[int] = None, ): @@ -84,13 +86,22 @@ def __init__( ) self._coalesce_bytes = coalesce_bytes self._split_coalesced = split_coalesced - self._num_actors = _DEFAULT_NUM_ACTORS + # Re-read at construction so ``monkeypatch.setenv`` / release-test env + # overrides work after this module has already been imported. + self._num_actors = env_integer( + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", _DEFAULT_NUM_ACTORS + ) self._io_concurrency = ( io_concurrency if io_concurrency is not None else _DEFAULT_IO_CONCURRENCY ) self._footer_batch_size = ( footer_batch_size if footer_batch_size is not None else _DEFAULT_BATCH_SIZE ) + self._result_batch_size = ( + result_batch_size + if result_batch_size is not None + else _DEFAULT_RESULT_BATCH_SIZE + ) # In-flight footer-batch window; 0/None -> auto (``num_actors * 2``). _inflight = ( max_inflight_batches @@ -107,7 +118,7 @@ def __init__( @property def yields_read_units(self) -> bool: # list_files already emits bin-packed read units, so ListFiles skips the - # partitioner. Packing is per listing task, not global. + # partitioner and lists in a single task (global packing + one pool). return True def list_files( @@ -147,6 +158,8 @@ def list_files( yield from self._read_and_pack(actors, file_infos, max_bin_bytes, limit) finally: for actor in actors: + # ``ActorProxy`` is ``ActorHandle | type[T]``; kill wants a handle. + # pyrefly: ignore[bad-argument-type] ray.kill(actor) def _read_and_pack( @@ -176,9 +189,11 @@ def dispatch_next() -> bool: if batch is None: return False actor: ActorProxy[FooterReader] = actors[batch_no % len(actors)] - gen: ray.ObjectRefGenerator = actor.read_footers.options( - num_returns="streaming" - ).remote(batch) + # Streaming ``@ray.method``; stub types ``.remote`` as ``ObjectRef``. + # pyrefly: ignore[bad-assignment] + gen: ray.ObjectRefGenerator = actor.read_footers.remote( + batch, result_batch_size=self._result_batch_size + ) pending.append(gen) batch_no += 1 return True diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py index 8994649f441b..54e8fcc60486 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py @@ -209,6 +209,7 @@ def _read_and_chunk(self, path: str, size: int) -> FileChunks: row_groups = coalesce_row_groups(per_rg, self.coalesce_bytes) return FileChunks(path=path, size=size, row_groups=row_groups) + @ray.method(num_returns="streaming") def read_footers( self, files: List[Tuple[str, int]], *, result_batch_size: int = 1 ) -> Iterator[List[FileChunks]]: @@ -216,8 +217,11 @@ def read_footers( Yields lists of ``FileChunks`` (not single results): each list the driver receives costs one object-store fetch, so batching cuts driver-side - deserialization overhead ~``result_batch_size``-fold. Call with - ``num_returns="streaming"`` so results stream out as footers land. + deserialization overhead ~``result_batch_size``-fold. At the default of + ``1`` a directory of N files costs N fetches on the single listing task; + callers set it via ``RAY_DATA_PARQUET_FOOTER_RESULT_BATCH_SIZE``. + ``num_returns`` is fixed to ``"streaming"`` via ``@ray.method`` so + results stream out as footers land. """ futures = [ self.pool.submit(self._read_and_chunk, path, size) for path, size in files diff --git a/python/ray/data/_internal/datasource_v2/listing/listing_utils.py b/python/ray/data/_internal/datasource_v2/listing/listing_utils.py index f66c11862ea0..01c464b14c4d 100644 --- a/python/ray/data/_internal/datasource_v2/listing/listing_utils.py +++ b/python/ray/data/_internal/datasource_v2/listing/listing_utils.py @@ -155,6 +155,8 @@ def sample_files( pruners=pruners or [], preserve_order=True, ): + if file_info.size is None: + continue sampled_paths.append(file_info.path) sampled_sizes.append(file_info.size) if len(sampled_paths) >= max_files: diff --git a/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py index 7a810c7132f3..49b08bc5c762 100644 --- a/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py +++ b/python/ray/data/_internal/datasource_v2/partitioners/online_bin_packer.py @@ -3,9 +3,10 @@ import bisect from collections import defaultdict, deque from dataclasses import dataclass, field -from typing import Deque, List, Optional, Tuple +from typing import Deque, List, Optional, Tuple, cast from ray.data._internal.datasource_v2.chunkers.file_chunker import ( + ChunkMetadata, ParquetRowGroupChunkMetadata, create_chunk_metadata, ) @@ -217,26 +218,30 @@ def _place_heavy(self, item: BinItem) -> None: # (With splitting off the item is a single unit, so this reduces to the # original Next Fit.) cap = self._cap - if self._heavy_path != item.path: + if self._heavy_path != item.path or self._heavy_bin is None: if self._heavy_bin is not None: self._output.append(self._heavy_bin.seal()) - self._heavy_path, self._heavy_bin = item.path, _OpenBin() + self._heavy_path = item.path + self._heavy_bin = _OpenBin() + heavy_bin = self._heavy_bin units = self._units(item) prefix = _prefix_sums(units) start = 0 while start < len(units): - end = _largest_prefix_fit(prefix, start, cap - self._heavy_bin.used_bytes) + end = _largest_prefix_fit(prefix, start, cap - heavy_bin.used_bytes) if end == start: # nothing fits the open bin - if self._heavy_bin.items: # seal it and retry on a fresh bin - self._output.append(self._heavy_bin.seal()) - self._heavy_bin = _OpenBin() + if heavy_bin.items: # seal it and retry on a fresh bin + self._output.append(heavy_bin.seal()) + heavy_bin = _OpenBin() + self._heavy_bin = heavy_bin continue end = start + 1 # empty bin, lone unit > cap -> relaxation - self._heavy_bin.add(_subitem(item, len(units), start, end)) + heavy_bin.add(_subitem(item, len(units), start, end)) start = end if start < len(units): # remnant remains -> bin is full, seal - self._output.append(self._heavy_bin.seal()) - self._heavy_bin = _OpenBin() + self._output.append(heavy_bin.seal()) + heavy_bin = _OpenBin() + self._heavy_bin = heavy_bin # === Draining === @@ -286,4 +291,9 @@ def _bin_to_manifest(bin_: Bin) -> FileManifest: uncompressed_size=size_by_path[path], ) ) - return FileManifest.construct_manifest(paths, sizes, chunk_metadatas) + # TypedDict invariance: ``ParquetRowGroupChunkMetadata`` has extra keys + # beyond the empty ``ChunkMetadata`` base, so the concrete list is not + # assignable to ``List[Optional[ChunkMetadata]]`` without a cast. + return FileManifest.construct_manifest( + paths, sizes, cast(List[Optional[ChunkMetadata]], chunk_metadatas) + ) diff --git a/python/ray/data/_internal/planner/plan_list_files_op.py b/python/ray/data/_internal/planner/plan_list_files_op.py index 2271a7b610cd..360bb1a79a41 100644 --- a/python/ray/data/_internal/planner/plan_list_files_op.py +++ b/python/ray/data/_internal/planner/plan_list_files_op.py @@ -71,18 +71,10 @@ def plan_list_files_op( shuffle_config = op.shuffle_config_factory() # Some indexers (e.g. the footer-based Parquet indexer) already emit - # bin-packed read units from ``list_files``, so there's nothing left for a - # partitioner to do. They still list in parallel: each task bin-packs the - # slice of the path list it was handed, which is the same per-task locality - # a partitioner gets when listing is split. + # bin-packed read units from ``list_files`` -- they need the whole file + # stream on one task to pack globally, and there's nothing left to partition. yields_read_units = indexer.yields_read_units - # One task is required only when shuffle needs a single global RNG over the - # whole listing. Note that per-call indexer resources -- the footer indexer's - # reader-actor pool -- are provisioned per listing task, so a read handing in - # many explicit paths should size that pool accordingly. - should_parallelize = shuffle_config is None - transform_fns: List[MapTransformFn] = [ BlockMapTransformFn( partial( @@ -128,7 +120,12 @@ def plan_list_files_op( map_op = MapOperator.create( map_transformer, _create_input_data_buffer( - op, data_context, should_parallelize=should_parallelize + op, + data_context, + # A single task is required when shuffle needs one global RNG over + # the full listing, or when the indexer bin-packs read units itself + # (it must see the whole file stream to pack globally). + should_parallelize=shuffle_config is None and not yields_read_units, ), data_context, name="ListFiles", diff --git a/python/ray/data/tests/datasource/test_read_parquet_v2.py b/python/ray/data/tests/datasource/test_read_parquet_v2.py index 1d700d56e1ec..0c2a9e7bffbf 100644 --- a/python/ray/data/tests/datasource/test_read_parquet_v2.py +++ b/python/ray/data/tests/datasource/test_read_parquet_v2.py @@ -197,9 +197,9 @@ def test_count_pushdown_replaces_footer_indexer(tmp_path, restore_ctx): restore_ctx.use_datasource_v2 = True ds = ray.data.read_parquet(str(tmp_path)) - assert isinstance( - ds._logical_plan.dag.input_dependencies[0].file_indexer, FooterFileIndexer - ) + list_files_before = ds._logical_plan.dag.input_dependencies[0] + assert isinstance(list_files_before, ListFiles) + assert isinstance(list_files_before.file_indexer, FooterFileIndexer) dag = _optimized_count_plan(ds).dag @@ -223,6 +223,7 @@ def test_count_pushdown_preserves_list_files_fields(tmp_path, restore_ctx, read_ restore_ctx.use_datasource_v2 = True ds = ray.data.read_parquet(str(tmp_path), **read_kwargs) original = ds._logical_plan.dag.input_dependencies[0] + assert isinstance(original, ListFiles) (rebuilt,) = [ op for op in _walk(_optimized_count_plan(ds).dag) if isinstance(op, ListFiles) diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 8f987cc51b64..7df76e29d914 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -366,15 +366,20 @@ anyscale_sdk_2026: true byod: runtime_env: - # imagenet parquet: 7416 single-row-group files of ~8.15 MiB. The V1 - # partitioner sized buckets off a 5x encoding-ratio estimate, which - # over-counts for already-compressed image bytes, so it landed on ~4 - # files (~31 MB) per block. The footer path measures the real bytes, so - # the default budget produces ~66 MB blocks -- 2x coarser. With - # ``equal=True`` the splitter buffers whole blocks, so coarser blocks - # mean more read-ahead is thrown away when the consumers stop. 36 MiB - # reproduces the ~4-files-per-block granularity. - - RAY_DATA_PARQUET_BIN_PACKING_BYTES=37748736 + # imagenet parquet: 7416 single-row-group files of ~8.15 MiB, listed on + # one task. ListFiles dominates this test, and its cost tracks the number + # of results the driver pulls back rather than the footer IO itself: at + # the default result batch of 1 the listing task pays one object-store + # fetch per file (7.4k of them). Batching 50 files per actor call and per + # streamed result cuts that to ~149 fetches. + - RAY_DATA_PARQUET_FOOTER_BATCH_SIZE=50 + - RAY_DATA_PARQUET_FOOTER_RESULT_BATCH_SIZE=50 + # imagenet does not compress (uncompressed/on-disk = 1.00), so the V1 + # partitioner's 5x encoding estimate over-counted by 5x and it landed on + # ~4 files (~31 MB) per block. Matching that granularity was tried at + # 36 MiB and made things worse -- it doubles the block count, and block + # generation is ~4 ms per manifest block. Left at the default. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: timeout: 300 wait_for_nodes: @@ -463,11 +468,10 @@ byod: post_build_script: byod_install_mosaicml.sh runtime_env: - # This benchmark hands in 200 explicit parquet paths, so ListFiles - # shards them into 200 tasks of one path each. The footer reader pool is - # provisioned per listing task, so the default would stand up 32 actors - # to read a single footer. One actor per task is all this shape needs. - - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=1 + # This benchmark hands in 200 explicit parquet paths, listed on a single + # task. At the default footer batch size of 10 that is 20 batches, so + # actors past the 20th are provisioned and never dispatched to. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=20 cluster_compute: dataset/multi_node_train_16_workers.yaml run: From 3129cffb89610dd54a071f77e6f1011bfa8c1aa5 Mon Sep 17 00:00:00 2001 From: Goutam Date: Tue, 28 Jul 2026 23:49:27 -0700 Subject: [PATCH 008/135] [Data] Restore map_batches read/map fusion; per-test bin budgets Release-test tuning for the Parquet V2 footer read path, plus one real regression the benchmark itself introduced. map_batches: 26cdef2abc added ``num_cpus=0.99`` to ``read_parquet`` in map_benchmark.py. The fusion rule canonicalizes an unspecified ``num_cpus`` to 1, so 0.99 makes the read incompatible with the downstream map_batches ops and they stop fusing. Unfused, every read output crosses the object store: 1.13 TiB on sf1000 lineitem and 484.5s of block serialization against 0.6s fused, taking the test from 141s to 335s vs master. Drop the arg and pin a 1 GiB bin budget -- the 64 MiB default is worst-case on this table (three 24.36 MiB row groups exceed it, so bins take two and sit 24% empty, giving 24,432 read tasks against master's 1,000). aggregate_groups: 32 MiB on both shuffle strategies. First setting to move fixed_size/84-groups/sort_shuffle, stuck at 220-259s across four builds under every other budget; 32 MiB brings it to 192s. This is the opposite direction from map_groups, which wants 1.25 GiB on the same dataset. tpch_q1: 192 MiB, matching q20 on the same table. Also corrects comments that described master's read path as V1. Master is DSv2 with the round-robin partitioner for every suite except map_batches, which is V1 there because DEFAULT_USE_DATASOURCE_V2 is False on master and #64821 (branch-only) flips it. Tests: pytest python/ray/data/tests/datasource/test_parquet.py::test_parquet_read_spread python/ray/data/tests/test_predicate_pushdown.py -- 51 passed. AI assistance was used for this change. Signed-off-by: Goutam --- .../listing/footer_file_indexer.py | 11 +- .../ray/data/tests/datasource/test_parquet.py | 9 +- .../ray/data/tests/test_predicate_pushdown.py | 4 + .../nightly_tests/dataset/map_benchmark.py | 8 +- release/release_data_tests.yaml | 223 +++++++++++++++--- 5 files changed, 212 insertions(+), 43 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py index 286145b03b12..1e902c258d34 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py @@ -114,6 +114,9 @@ def __init__( if max_shared_open_bins is not None else _DEFAULT_MAX_SHARED_OPEN_BINS ) + self._max_bin_bytes = env_integer( + "RAY_DATA_PARQUET_BIN_PACKING_BYTES", _DEFAULT_BIN_PACKING_BYTES + ) @property def yields_read_units(self) -> bool: @@ -132,7 +135,7 @@ def list_files( limit: Optional[int] = None, projected_columns: Optional[List[str]] = None, ) -> Iterable[FileManifest]: - max_bin_bytes = _DEFAULT_BIN_PACKING_BYTES + max_bin_bytes = self._max_bin_bytes file_infos = self.list_file_infos( paths, filesystem=filesystem, @@ -189,10 +192,12 @@ def dispatch_next() -> bool: if batch is None: return False actor: ActorProxy[FooterReader] = actors[batch_no % len(actors)] - # Streaming ``@ray.method``; stub types ``.remote`` as ``ObjectRef``. + # Streaming ``@ray.method``; stub types ``.remote`` as ``ObjectRef`` + # and don't preserve the method's keyword args. # pyrefly: ignore[bad-assignment] gen: ray.ObjectRefGenerator = actor.read_footers.remote( - batch, result_batch_size=self._result_batch_size + batch, + result_batch_size=self._result_batch_size, # pyrefly: ignore[unexpected-keyword] ) pending.append(gen) batch_no += 1 diff --git a/python/ray/data/tests/datasource/test_parquet.py b/python/ray/data/tests/datasource/test_parquet.py index 4798d0bd85e7..97d3e4d1fd8d 100644 --- a/python/ray/data/tests/datasource/test_parquet.py +++ b/python/ray/data/tests/datasource/test_parquet.py @@ -1482,7 +1482,9 @@ def map_batches(batch): # tests should only be carefully reordered to retain this invariant! -def test_parquet_read_spread(ray_start_cluster, tmp_path, restore_data_context): +def test_parquet_read_spread( + ray_start_cluster, tmp_path, restore_data_context, monkeypatch +): ray.shutdown() cluster = ray_start_cluster cluster.add_node( @@ -1516,8 +1518,11 @@ def get_node_id(): df2.to_parquet(path2) # Minimize the block size to prevent Ray Data from reading multiple fragments in a - # single task. + # single task. On the V2 footer path the packer uses + # RAY_DATA_PARQUET_BIN_PACKING_BYTES (not target_max_block_size), so pin that + # too or both files collapse into one read task on one node. ray.data.DataContext.get_current().target_max_block_size = 1 + monkeypatch.setenv("RAY_DATA_PARQUET_BIN_PACKING_BYTES", "1") ds = ray.data.read_parquet(data_path) # Force reads. diff --git a/python/ray/data/tests/test_predicate_pushdown.py b/python/ray/data/tests/test_predicate_pushdown.py index b5475820871c..646ecea8b56a 100644 --- a/python/ray/data/tests/test_predicate_pushdown.py +++ b/python/ray/data/tests/test_predicate_pushdown.py @@ -37,6 +37,10 @@ ) from ray.tests.conftest import * # noqa +# Keep the footer-reader pool tiny: this module reads small local Parquet +# fixtures, and the default 32-actor pool times out under CI parallelism. +os.environ["RAY_DATA_PARQUET_FOOTER_NUM_ACTORS"] = "1" + # Pattern to match read operators in logical plans. # Matches V1 ``Read[Read]`` or the V2 ``ListFiles → ReadFiles`` # chain where the consumer is named ``ReadFiles`` (e.g. diff --git a/release/nightly_tests/dataset/map_benchmark.py b/release/nightly_tests/dataset/map_benchmark.py index 31fea50f0968..a0e6eb29c217 100644 --- a/release/nightly_tests/dataset/map_benchmark.py +++ b/release/nightly_tests/dataset/map_benchmark.py @@ -111,7 +111,13 @@ def apply_map_batches(ds): ) def benchmark_fn(): - ds = ray.data.read_parquet(path, num_cpus=0.99) + # Leave ``num_cpus`` unset: the fusion rule canonicalizes an unspecified + # ``num_cpus`` to 1, so any other value here (0.99 included) makes the + # read incompatible with the downstream ``map_batches`` ops and they + # stop fusing. Unfused, every read output crosses the object store -- + # 1.13 TiB on sf1000 lineitem, ~485s of serialization against ~0.6s + # fused. + ds = ray.data.read_parquet(path) # Apply the map transformation. if args.api == "map": diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 7df76e29d914..496c469d3b63 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -42,22 +42,22 @@ s3://ray-benchmark-data-internal-us-west-2/imagenet/parquet --format parquet --iter-bundles -- name: "read_large_parquet_{{scaling}}" +# NOTE: the two scaling variants are spelled out rather than driven by a matrix +# because they want opposite bin budgets, and a matrix would take the cartesian +# product. Files here are ~3.9 GiB uncompressed with ~69 MiB row groups, so the +# default budget can't fit two row groups and every one becomes its own read +# task (~5.8k tasks for 103 files). On a fixed cluster that task explosion +# dominates and a larger budget wins; on an autoscaling cluster the extra tasks +# give the autoscaler demand to act on earlier and the default wins. +- name: "read_large_parquet_fixed_size" python: "3.10" cluster: anyscale_sdk_2026: true byod: runtime_env: - # Files here are ~3.9 GiB uncompressed with ~69 MiB row groups. The - # default bin budget can't fit two row groups, so every one becomes its - # own read task (~5.8k tasks for 103 files). 4 GiB packs a file per bin, - # matching the whole-file granularity the V1 partitioner produced. - - RAY_DATA_PARQUET_BIN_PACKING_BYTES=4294967296 - cluster_compute: "{{scaling}}_cpu_compute.yaml" - - matrix: - setup: - scaling: [fixed_size, autoscaling] + # 1 GiB packs ~14 row groups per bin, cutting the task count ~14x. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1073741824 + cluster_compute: "fixed_size_cpu_compute.yaml" run: timeout: 3600 @@ -71,6 +71,21 @@ s3://ray-benchmark-data-internal-us-west-2/large-parquet/ --format parquet --iter-bundles --memory 3650722201 +- name: "read_large_parquet_autoscaling" + python: "3.10" + cluster: + anyscale_sdk_2026: true + # Default budget: -25% vs master here, against +2% at 4 GiB. + cluster_compute: "autoscaling_cpu_compute.yaml" + + run: + timeout: 3600 + # See the fixed_size variant for why --memory is pinned. + script: > + python read_and_consume_benchmark.py + s3://ray-benchmark-data-internal-us-west-2/large-parquet/ --format parquet + --iter-bundles --memory 3650722201 + - name: "read_images_{{scaling}}" python: "3.10" cluster: @@ -124,7 +139,8 @@ runtime_env: # sf1000 lineitem is read with its full 17-column schema: ~1.16 GiB # uncompressed per file over 1000 files. 1.25 GiB packs ~one file per - # bin (~943 read tasks vs ~1000 blocks under V1); the default budget + # bin (~943 read tasks vs the ~1000 blocks master's round-robin + # partitioner produced); the default budget # would produce ~18k tasks. - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1342177280 run: @@ -215,12 +231,14 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=1 - RAYTEST_FAIL_ON_SPILLING=0 - # ``groupby_benchmark`` reads sf100 lineitem with its full 17-column - # schema: ~1.17 GiB uncompressed per file over 100 files. 1.25 GiB packs - # ~one file per bin (~95 read tasks), matching the whole-file - # granularity of the V1 partitioner. The default budget yields ~2500 - # read tasks, which starves the downstream shuffle. - - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1342177280 + # 32 MiB: half the default, so the scan yields ~2x the read tasks. + # Measured on both shuffle strategies. It's the first setting to move + # fixed_size/84-groups/sort_shuffle, which had been stuck at 220-259s + # against master's 145s under every other budget (default 64 MiB and + # the 1.25 GiB that helps ``map_groups`` on this same dataset); 32 MiB + # brings it to 192s. Aggregation wants more, smaller read tasks here -- + # the opposite of ``map_groups``, despite the identical scan. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=33554432 cluster_compute: "{{scaling}}_all_to_all_compute.yaml" run: @@ -294,7 +312,7 @@ - RAYTEST_FAIL_ON_SPILLING=0 # Both sides are read with their full schema: ~1.17 GiB uncompressed # per lineitem file. 1.25 GiB packs ~one file per bin (~95 read tasks - # vs 100 blocks under V1). + # vs the 100 blocks master's round-robin partitioner produced). - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1342177280 cluster_compute: fixed_size_100_cpu_compute.yaml @@ -318,7 +336,18 @@ # Wide Schema tests ############### -- name: wide_schema_pipeline_{{data_type}} +# NOTE: `primitives` and `tensors` are spelled out rather than folded into the +# matrix below because each wants its own bin budget, and a matrix takes the +# cartesian product of its lists (see the read_large_parquet NOTE above). Their +# names match the matrix-generated ones exactly so baseline history is unbroken. +# +# The bin budget is compared against row-group `total_byte_size` -- data-page +# bytes only, post-encoding. For these 5000-column datasets that is a poor proxy +# for the work a read task does: `primitives` files are 21.4 MiB on S3 but +# report only 0.45 MiB, because dictionary + RLE collapses the repeated 500-char +# values and the real weight is dictionary pages plus a 5000-column footer +# carrying per-chunk min/max statistics. +- name: wide_schema_pipeline_primitives python: "3.10" cluster: anyscale_sdk_2026: true @@ -331,13 +360,46 @@ - RAYTEST_FAIL_ON_SPILLING=1 # S3 tensor data was written by Ray 2.49-2.54 using cloudpickle. - RAY_DATA_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA=1 - # No bin budget override here. These datasets are 10-40 MB in total - # across 9-27 single-row-group files, so every budget from 64 MiB up - # packs them into a single bin -- except `tensors`, whose 37.25 MiB row - # groups already exceed the 64 MiB default's two-per-bin threshold and - # so land one per bin on their own. Splitting `primitives` (0.45 MiB - # per file), `nested_structs` (1.3 MiB) and `objects` (4.2 MiB) needs a - # minimum-block-count floor, not a byte budget. + # 27 single-row-group files reporting 0.45 MiB each: at the 64 MiB + # default all 27 land in one shared bin, so the whole 579 MiB dataset + # reads as a single task. 256 KiB is below one row group, so each gets + # its own bin (indivisible-oversize relaxation in OnlineBinPacker._place) + # -> 27 tasks, the ceiling while row groups stay atomic. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=262144 + # + # 27 actors x batch size 1 == one footer read per actor, so all 27 + # footers are read in a single concurrent wave. Worth the extra actor + # startup here because these footers are unusually expensive: 5000 + # column chunks each carrying 500-char min/max statistics. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=27 + - RAY_DATA_PARQUET_FOOTER_BATCH_SIZE=1 + - RAY_DATA_PARQUET_READER_IO_THREAD_COUNT=5000 + cluster_compute: fixed_size_cpu_compute.yaml + + run: + timeout: 300 + script: > + python wide_schema_pipeline_benchmark.py + --data-type primitives + +- name: wide_schema_pipeline_tensors + python: "3.10" + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + # Preserve the default verbose stats for resource manager. + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # S3 tensor data was written by Ray 2.49-2.54 using cloudpickle. + - RAY_DATA_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA=1 + # 39 MiB sits just above these 37.25 MiB row groups, so one fills a bin + # and the next cannot join it -- one row group per read task, same + # placement the 64 MiB default already produced via its two-per-bin + # threshold, but pinned so it survives a change to the default. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=40894464 # # These datasets are small enough that the footer-reader pool is pure # startup cost; keep it narrow and spread the few files across it. @@ -346,15 +408,80 @@ - RAY_DATA_PARQUET_READER_IO_THREAD_COUNT=5000 cluster_compute: fixed_size_cpu_compute.yaml - matrix: - setup: - data_type: [primitives, tensors, objects, nested_structs] + run: + timeout: 300 + script: > + python wide_schema_pipeline_benchmark.py + --data-type tensors + +- name: wide_schema_pipeline_nested_structs + python: "3.10" + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + # Preserve the default verbose stats for resource manager. + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # S3 tensor data was written by Ray 2.49-2.54 using cloudpickle. + - RAY_DATA_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA=1 + # 21 single-row-group files reporting 1.30 MiB each: at the 64 MiB + # default all 21 land in one shared bin and the dataset reads as a + # single task. 2 MiB is the widest budget that still keeps one file per + # bin -- two would need 2.6 MiB -- so this is 21 tasks, the ceiling + # while row groups stay atomic. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=2097152 + # + # 21 actors x batch size 1 == one footer read per actor, so all 21 + # footers are read in a single concurrent wave -- same shape as + # `primitives`. Worth the extra actor startup here because these + # footers are unusually expensive: 15000 column chunks each carrying + # min/max statistics. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=21 + - RAY_DATA_PARQUET_FOOTER_BATCH_SIZE=1 + - RAY_DATA_PARQUET_READER_IO_THREAD_COUNT=5000 + cluster_compute: fixed_size_cpu_compute.yaml run: timeout: 300 script: > python wide_schema_pipeline_benchmark.py - --data-type {{data_type}} + --data-type nested_structs + +- name: wide_schema_pipeline_objects + python: "3.10" + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + # Preserve the default verbose stats for resource manager. + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # S3 tensor data was written by Ray 2.49-2.54 using cloudpickle. + - RAY_DATA_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA=1 + # 9 single-row-group files of 4.23 MiB: at the 64 MiB default all 9 land + # in one shared bin and the dataset reads as a single task. 4.20 MiB sits + # just under one row group, so each is oversized and gets its own bin; + # the smallest possible pair (2 x 2.71 MiB) also exceeds it, so no two + # files ever share -> 9 tasks, the ceiling while row groups stay atomic. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=4404020 + # + # 9 actors x batch size 1 == one footer read per actor, so all 9 footers + # are read in a single concurrent wave -- same shape as the other three. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=9 + - RAY_DATA_PARQUET_FOOTER_BATCH_SIZE=1 + - RAY_DATA_PARQUET_READER_IO_THREAD_COUNT=5000 + cluster_compute: fixed_size_cpu_compute.yaml + + run: + timeout: 300 + script: > + python wide_schema_pipeline_benchmark.py + --data-type objects ####################### # Streaming split tests @@ -374,8 +501,9 @@ # streamed result cuts that to ~149 fetches. - RAY_DATA_PARQUET_FOOTER_BATCH_SIZE=50 - RAY_DATA_PARQUET_FOOTER_RESULT_BATCH_SIZE=50 - # imagenet does not compress (uncompressed/on-disk = 1.00), so the V1 - # partitioner's 5x encoding estimate over-counted by 5x and it landed on + # imagenet does not compress (uncompressed/on-disk = 1.00), so master's + # round-robin partitioner over-counted by 5x -- it sizes on-disk bytes + # through a fixed 5x encoding estimate -- and it landed on # ~4 files (~31 MB) per block. Matching that granularity was tried at # 36 MiB and made things worse -- it doubles the block count, and block # generation is ~4 ms per manifest block. Left at the default. @@ -415,11 +543,12 @@ runtime_env: # No bin budget override: at the default this dataset (513 single-row- # group files of ~88 MB) already packs ~one file per bin, matching the - # granularity the V1 partitioner produced. + # granularity master's round-robin partitioner produced. # # This benchmark opens 8 datasets over the same path, so the footer - # path costs 8 x 513 footer reads and 8 x 32 reader actors -- work V1 - # never did, and enough to dominate the ~40s `random_mix` variants. + # path costs 8 x 513 footer reads and 8 x 32 reader actors -- work + # master never did, and enough to dominate the ~40s `random_mix` + # variants. # Narrow the pool; the per-actor IO concurrency still covers 513 files. - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=4 cluster_compute: dataset_mixing/compute_8_cpu.yaml @@ -711,6 +840,16 @@ cluster: anyscale_sdk_2026: true + byod: + runtime_env: + # sf1000 lineitem, full 17-column schema: 1000 files x 49 row groups of + # 24.36 MiB uncompressed = 1.16 GiB per file, and the distribution is + # flat (p0 24.35 MiB, p100 24.78 MiB). 1 GiB packs 42 row groups per bin + # at 99% fill -> ~1170 read tasks, close to the ~1000 one-task-per-file + # that DSv1 runs on master. The 64 MiB default is the worst case here: + # three row groups exceed it, so bins take two and sit 24% empty, giving + # 24.5k read tasks (measured 24,432). + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1073741824 cluster_compute: "{{scaling}}_cpu_compute.yaml" run: @@ -1214,6 +1353,15 @@ cluster: anyscale_sdk_2026: true + byod: + runtime_env: + # sf1000 lineitem: 1000 files x 49 row groups, 24.36 MiB uncompressed + # per row group at the full 17-column schema. q1 projects 7 of those + # columns and pre-filters on l_shipdate, so the packer sizes on a + # fraction of that -- which is why this lands well below the 1 GiB the + # full-schema readers of the same table (map_batches, write_parquet) + # want. 192 MiB measured best here, matching q20 on the same table. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=201326592 cluster_compute: "{{scaling}}_all_to_all_compute.yaml" run: @@ -1515,7 +1663,8 @@ runtime_env: # q20 projects 4 of lineitem's 17 columns -> ~160 MiB uncompressed per # file. At the default budget that splits each file ~4 ways (400 blocks - # vs the 100 the V1 partitioner produced), and the extra blocks become + # vs the 100 master's round-robin partitioner produced), and the extra + # blocks become # extra shuffle-map tasks feeding HashAggregate. 192 MiB packs one file # per bin. Per-query value: the same table under q21's 2-column # projection is only ~92 MiB per file. From 8fef0821a6f225ef7d473fd286a9b95ceb1d92aa Mon Sep 17 00:00:00 2001 From: Goutam Date: Wed, 29 Jul 2026 11:18:06 -0700 Subject: [PATCH 009/135] [Data] Per-variant Parquet bin budgets for aggregate_groups and cross_az aggregate_groups: move the bin budget from the block to a per-variant setting via matrix.adjustments, with bin_packing_bytes as a fourth matrix variable. Only fixed_size/sort_shuffle/84-groups needed retuning -- it ran 211s at 32 MiB in release build #102329 against master's ~145s, and 137s at 256 MiB. The other seven variants keep 32 MiB, where they were measured healthy in that same build (+10.2% to -30.7%), rather than move onto an unmeasured value. The cost being tuned is per-block sort-shuffle overhead, not bytes: at 32 MiB the scan emitted 4x the ListFiles outputs and ~1.5x the blocks into the shuffle (Sort Sample 3050 vs master's 2000) for an identical 20.8GB object-store peak and identical row count. cross_az_map_batches_autoscaling_iptable_failure_injection: pin 1 GiB. These tests moved from the V1 to the V2 read path when the use_datasource_v2=False pin came out of map_benchmark.py; on V2 at the 64 MiB default the object-store peak doubled (310GB -> 616GB) and runtime went 304s -> 725s. The larger budget is a mitigation and is not yet measured. Also request num_cpus=0 for FooterReaderActor. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../datasource_v2/listing/footer_reader.py | 2 +- release/release_data_tests.yaml | 104 +++++++++++++++--- 2 files changed, 92 insertions(+), 14 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py index 54e8fcc60486..99d9592112dd 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py @@ -247,4 +247,4 @@ def read_footers( # The Ray actor class. Built via the functional ``ray.remote(...)`` form (rather # than the ``@ray.remote`` decorator) so ``FooterReader`` stays a plain class and # actor handles can be typed ``ActorProxy[FooterReader]``. -FooterReaderActor = ray.remote(FooterReader) +FooterReaderActor = ray.remote(num_cpus=0)(FooterReader) diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 496c469d3b63..66959d5b0eb9 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -216,13 +216,87 @@ - name: "aggregate_groups_{{scaling}}_{{shuffle_strategy}}_{{columns}}" python: "3.10" + # The bin budget is per-variant rather than per-block: only + # fixed_size/sort_shuffle/84-groups needed retuning, and the other seven were + # measured healthy at 32 MiB, so they stay there rather than move onto an + # unmeasured value. ``setup`` is left empty and every combination is + # enumerated in ``adjustments`` so each can carry its own budget. + # + # Baseline for all eight is release build #102329 (32 MiB everywhere) against + # master build #102323: + # + # | variant | 32 MiB | master | delta | + # |----------------------------------|--------|--------|------------| + # | fixed_size / sort / 84 groups | 215.7s | 145.0s | +48.8% | + # | autoscaling / sort / 84 groups | 463.6s | 420.7s | +10.2% | + # | autoscaling / hash / 84 groups | 208.8s | 201.9s | +3.4% | + # | autoscaling / hash / 7M groups | 2216.7s| 2208.7s| +0.4% | + # | fixed_size / hash / 84 groups | 19.3s | 19.8s | -2.7% | + # | fixed_size / hash / 7M groups | 663.5s | 771.2s | -14.0% | + # | fixed_size / sort / 7M groups | 550.7s | 651.7s | -15.5% | + # | autoscaling / sort / 7M groups | 716.6s |1033.8s | -30.7% | matrix: setup: - scaling: [fixed_size, autoscaling] - shuffle_strategy: [sort_shuffle_pull_based, hash_shuffle] - columns: - - "column08 column13 column14" # 84 groups - - "column02 column14" # 7M groups + scaling: [] + shuffle_strategy: [] + columns: [] + bin_packing_bytes: [] + adjustments: + # 256 MiB (4x the default): the one variant that needed retuning. It sat + # at 211s in #102329 on 32 MiB and 220-259s on smaller budgets, against + # master's ~145s; 256 MiB brings it to 137s, at or just under master. + # + # What's being tuned away is per-block sort-shuffle overhead, not bytes. + # At 32 MiB the scan emitted 4x the ``ListFiles`` outputs and ~1.5x the + # blocks into the shuffle (Sort Sample 3050 vs master's 2000) for an + # identical 20.8GB object-store peak and identical row count. With only + # 84 reduce partitions, block count is what dominates -- so this variant + # wants the same direction as ``map_groups`` (1.25 GiB on this same + # dataset), just less far. + - with: + scaling: fixed_size + shuffle_strategy: sort_shuffle_pull_based + columns: "column08 column13 column14" # 84 groups + bin_packing_bytes: 268435456 + # The remaining seven stay at 32 MiB, where they were measured. None is a + # tuned optimum -- they are a known-acceptable state, and 256 MiB is + # unmeasured for all of them. Worth a sweep given how far it moved the + # variant above, but not worth assuming. + - with: + scaling: fixed_size + shuffle_strategy: sort_shuffle_pull_based + columns: "column02 column14" # 7M groups + bin_packing_bytes: 33554432 + - with: + scaling: fixed_size + shuffle_strategy: hash_shuffle + columns: "column08 column13 column14" + bin_packing_bytes: 33554432 + - with: + scaling: fixed_size + shuffle_strategy: hash_shuffle + columns: "column02 column14" + bin_packing_bytes: 33554432 + - with: + scaling: autoscaling + shuffle_strategy: sort_shuffle_pull_based + columns: "column08 column13 column14" + bin_packing_bytes: 33554432 + - with: + scaling: autoscaling + shuffle_strategy: sort_shuffle_pull_based + columns: "column02 column14" + bin_packing_bytes: 33554432 + - with: + scaling: autoscaling + shuffle_strategy: hash_shuffle + columns: "column08 column13 column14" + bin_packing_bytes: 33554432 + - with: + scaling: autoscaling + shuffle_strategy: hash_shuffle + columns: "column02 column14" + bin_packing_bytes: 33554432 cluster: anyscale_sdk_2026: true byod: @@ -231,14 +305,7 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=1 - RAYTEST_FAIL_ON_SPILLING=0 - # 32 MiB: half the default, so the scan yields ~2x the read tasks. - # Measured on both shuffle strategies. It's the first setting to move - # fixed_size/84-groups/sort_shuffle, which had been stuck at 220-259s - # against master's 145s under every other budget (default 64 MiB and - # the 1.25 GiB that helps ``map_groups`` on this same dataset); 32 MiB - # brings it to 192s. Aggregation wants more, smaller read tasks here -- - # the opposite of ``map_groups``, despite the identical scan. - - RAY_DATA_PARQUET_BIN_PACKING_BYTES=33554432 + - RAY_DATA_PARQUET_BIN_PACKING_BYTES={{bin_packing_bytes}} cluster_compute: "{{scaling}}_all_to_all_compute.yaml" run: @@ -1779,6 +1846,17 @@ - RAY_health_check_failure_threshold=10 - RAY_gcs_rpc_server_connect_timeout_s=60 - RAYTEST_FAIL_ON_SPILLING=1 + # 1 GiB: 16x the default, so the scan yields far fewer, larger read + # tasks. ``map_batches`` wants this direction -- same as ``map_groups`` + # at 1.25 GiB, and the opposite of ``aggregate_groups`` at 32 MiB. + # + # This test read via V1 until the ``use_datasource_v2 = False`` pin came + # out of ``map_benchmark.py``. On V2 at the 64 MiB default it doubled + # object-store peak (310GB on V1 -> 616GB on V2, release build #101536 + # vs #102329) and ran 725s against 304s on V1. The larger budget cuts + # the block count to bring that peak back down; ``RAYTEST_FAIL_ON_ + # SPILLING=1`` above will fail the test if it moves the wrong way. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1073741824 cluster_compute: dataset/cross_az_250_350_compute_gce.yaml run: From 74e599b17d003be482ac1c12f1ce53ce0f5a5922 Mon Sep 17 00:00:00 2001 From: Goutam Date: Thu, 30 Jul 2026 11:11:45 -0700 Subject: [PATCH 010/135] [Data] Default footer actor pool to 1 in tests; bump fallback bin budget to 128MiB The Parquet footer indexer's default 32-actor pool times out (and trips Ray's "too many worker processes" warning, polluting doctest output) when many test targets run in parallel under CI. Rather than sprinkling per-module env writes, set the pool size to 1 in one place per test surface: - New python/ray/data/test.bzl wraps py_test/py_test_module_list/doctest to inject RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=1 into every Data test target's env (caller-supplied env still wins). - python/ray/data/tests/conftest.py and doctest_pytest_plugin.py setdefault the same var so non-bazel pytest runs match. - python/ray/train/v2 gets shared _TRAIN_V2_TEST_ENV dicts plus a conftest setdefault, replacing the repeated per-target env literals. - Drops the now-redundant os.environ write from test_predicate_pushdown.py. Also raises the fallback bin-packing budget from 64MiB to 128MiB when target_max_block_size is unset, and fixes the write_lance docstring example to pass SaveMode.OVERWRITE so repeated doctest runs don't fail on an existing dataset. AI assistance was used for this change. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- python/ray/data/BUILD.bazel | 4 +- .../listing/footer_file_indexer.py | 4 +- python/ray/data/dataset.py | 3 +- python/ray/data/test.bzl | 32 +++++ python/ray/data/tests/conftest.py | 6 + .../ray/data/tests/doctest_pytest_plugin.py | 8 ++ .../ray/data/tests/test_predicate_pushdown.py | 4 - python/ray/train/v2/BUILD.bazel | 134 +++++++++--------- python/ray/train/v2/tests/conftest.py | 5 + 9 files changed, 127 insertions(+), 73 deletions(-) create mode 100644 python/ray/data/test.bzl diff --git a/python/ray/data/BUILD.bazel b/python/ray/data/BUILD.bazel index ad97c7939824..b529e30c03cd 100644 --- a/python/ray/data/BUILD.bazel +++ b/python/ray/data/BUILD.bazel @@ -1,5 +1,5 @@ -load("@rules_python//python:defs.bzl", "py_library", "py_test") -load("//bazel:python.bzl", "doctest", "py_test_module_list") +load("@rules_python//python:defs.bzl", "py_library") +load(":test.bzl", "doctest", "py_test", "py_test_module_list") # Export pytest plugin so it can be used in the documentation tests. exports_files( diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py index 1e902c258d34..bb6109bc4dd0 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_file_indexer.py @@ -48,7 +48,9 @@ ) # Fallback bin budget (uncompressed bytes per read task) when # ``target_max_block_size`` is unset. -_DEFAULT_BIN_PACKING_BYTES = env_integer("RAY_DATA_PARQUET_BIN_PACKING_BYTES", 64 * MiB) +_DEFAULT_BIN_PACKING_BYTES = env_integer( + "RAY_DATA_PARQUET_BIN_PACKING_BYTES", 128 * MiB +) # Shared (mixed-colour) bins the packer keeps open at once. A wider pool packs # tighter; a narrower one seals bins sooner, and since each sealed bin becomes a # read task, that's what lets reads start before every footer has landed. diff --git a/python/ray/data/dataset.py b/python/ray/data/dataset.py index 216f60b2cb75..c7a10e412b79 100644 --- a/python/ray/data/dataset.py +++ b/python/ray/data/dataset.py @@ -5934,10 +5934,11 @@ def write_lance( .. testcode:: import ray import pandas as pd + from ray.data import SaveMode docs = [{"title": "Lance data sink test"} for key in range(4)] ds = ray.data.from_pandas(pd.DataFrame(docs)) - ds.write_lance("/tmp/data/") + ds.write_lance("/tmp/lance_data/", mode=SaveMode.OVERWRITE) Args: path: The path to the destination Lance dataset. Ignored when namespace diff --git a/python/ray/data/test.bzl b/python/ray/data/test.bzl new file mode 100644 index 000000000000..1d123050cd73 --- /dev/null +++ b/python/ray/data/test.bzl @@ -0,0 +1,32 @@ +"""Wrappers that inject default Ray Data test environment variables. + +Keeps the Parquet footer-reader actor pool tiny for unit/integration tests +that exercise small fixtures. Release/perf jobs that need the production +default should not use these wrappers (or should override ``env``). +""" + +load("@rules_python//python:defs.bzl", _py_test = "py_test") +load("//bazel:python.bzl", _doctest = "doctest", _py_test_module_list = "py_test_module_list") + +_DATA_TEST_ENV = { + # Default 32-actor footer pool times out / warns under CI parallelism. + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS": "1", +} + +def _merge_env(env): + merged = dict(_DATA_TEST_ENV) + if env: + merged.update(env) + return merged + +def py_test(**kwargs): + kwargs["env"] = _merge_env(kwargs.pop("env", None)) + _py_test(**kwargs) + +def py_test_module_list(**kwargs): + kwargs["env"] = _merge_env(kwargs.pop("env", None)) + _py_test_module_list(**kwargs) + +def doctest(**kwargs): + kwargs["env"] = _merge_env(kwargs.pop("env", None)) + _doctest(**kwargs) diff --git a/python/ray/data/tests/conftest.py b/python/ray/data/tests/conftest.py index f3905bd854a1..0479b737cfcc 100644 --- a/python/ray/data/tests/conftest.py +++ b/python/ray/data/tests/conftest.py @@ -30,6 +30,12 @@ from ray.util.debug import reset_log_once from ray.util.state import list_actors +# Keep the footer-reader pool tiny for unit/integration tests. The default +# 32-actor pool times out under CI parallelism; tests that need a larger pool +# can override with monkeypatch.setenv. Mirrored in python/ray/data/test.bzl +# for bazel test targets. +os.environ.setdefault("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", "1") + def mock_all_to_all_op(input_op, name="MockAllToAll"): """Create a mock AllToAllOperator for testing. diff --git a/python/ray/data/tests/doctest_pytest_plugin.py b/python/ray/data/tests/doctest_pytest_plugin.py index 123daf523379..ef07f7524941 100644 --- a/python/ray/data/tests/doctest_pytest_plugin.py +++ b/python/ray/data/tests/doctest_pytest_plugin.py @@ -1,8 +1,16 @@ """This file is injected for Ray Data doctest targets.""" +import os + import pytest import ray +# Keep the footer-reader pool tiny: doctests read small Parquet fixtures, and +# the default 32-actor pool can trip Ray's "too many worker processes" warning, +# which pollutes Sphinx ``testoutput`` expectations. Mirrored in +# python/ray/data/test.bzl for bazel doctest targets. +os.environ.setdefault("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", "1") + @pytest.fixture(autouse=True, scope="module") def shutdown_ray(): diff --git a/python/ray/data/tests/test_predicate_pushdown.py b/python/ray/data/tests/test_predicate_pushdown.py index 646ecea8b56a..b5475820871c 100644 --- a/python/ray/data/tests/test_predicate_pushdown.py +++ b/python/ray/data/tests/test_predicate_pushdown.py @@ -37,10 +37,6 @@ ) from ray.tests.conftest import * # noqa -# Keep the footer-reader pool tiny: this module reads small local Parquet -# fixtures, and the default 32-actor pool times out under CI parallelism. -os.environ["RAY_DATA_PARQUET_FOOTER_NUM_ACTORS"] = "1" - # Pattern to match read operators in logical plans. # Matches V1 ``Read[Read]`` or the V2 ``ListFiles → ReadFiles`` # chain where the consumer is named ``ReadFiles`` (e.g. diff --git a/python/ray/train/v2/BUILD.bazel b/python/ray/train/v2/BUILD.bazel index 464a0720c042..fa79fdecfac4 100644 --- a/python/ray/train/v2/BUILD.bazel +++ b/python/ray/train/v2/BUILD.bazel @@ -1,13 +1,23 @@ load("@rules_python//python:defs.bzl", "py_library", "py_test") load("//bazel:python.bzl", "doctest") +# Shared env for train v2 tests. Footer actor pool kept tiny so Data-integrated +# tests do not time out under CI parallelism. +_TRAIN_V2_TEST_ENV = { + "RAY_TRAIN_V2_ENABLED": "1", + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS": "1", +} + +_TRAIN_V2_TEST_ENV_TF = { + "RAY_TRAIN_V2_ENABLED": "1", + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS": "1", + "TF_USE_LEGACY_KERAS": "1", +} + doctest( name = "py_doctest[train_v2]", size = "large", - env = { - "RAY_TRAIN_V2_ENABLED": "1", - "TF_USE_LEGACY_KERAS": "1", - }, + env = _TRAIN_V2_TEST_ENV_TF, files = glob( ["**/*.py"], exclude = [ @@ -29,7 +39,7 @@ py_test( name = "test_accelerator_utils", size = "small", srcs = ["tests/test_accelerator_utils.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -45,7 +55,7 @@ py_test( name = "test_autoscaling_coordinator_client", size = "small", srcs = ["tests/test_autoscaling_coordinator_client.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -61,7 +71,7 @@ py_test( name = "test_async_checkpointing_validation", size = "large", srcs = ["tests/test_async_checkpointing_validation.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -77,7 +87,7 @@ py_test( name = "test_checkpoint_manager", size = "small", srcs = ["tests/test_checkpoint_manager.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -93,7 +103,7 @@ py_test( name = "test_config", size = "small", srcs = ["tests/test_config.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -109,7 +119,7 @@ py_test( name = "test_circular_imports", size = "small", srcs = ["tests/test_circular_imports.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -125,7 +135,7 @@ py_test( name = "test_circular_import_linter", size = "small", srcs = ["tests/test_circular_import_linter.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -141,7 +151,7 @@ py_test( name = "test_validation_manager", size = "small", srcs = ["tests/test_validation_manager.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -157,7 +167,7 @@ py_test( name = "test_collective", size = "medium", srcs = ["tests/test_collective.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -173,7 +183,7 @@ py_test( name = "test_callback_manager", size = "small", srcs = ["tests/test_callback_manager.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -189,7 +199,7 @@ py_test( name = "test_controller", size = "medium", srcs = ["tests/test_controller.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -205,7 +215,7 @@ py_test( name = "test_elastic_scaling_policy", size = "small", srcs = ["tests/test_elastic_scaling_policy.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -221,7 +231,7 @@ py_test( name = "test_elastic_e2e", size = "medium", srcs = ["tests/test_elastic_e2e.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -237,7 +247,7 @@ py_test( name = "test_controller_callback_behaviour", size = "medium", srcs = ["tests/test_controller_callback_behaviour.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -253,7 +263,7 @@ py_test( name = "test_data_integration", size = "large", srcs = ["tests/test_data_integration.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "data_integration", "exclusive", @@ -270,7 +280,7 @@ py_test( name = "test_data_parallel_trainer", size = "large", srcs = ["tests/test_data_parallel_trainer.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -286,7 +296,7 @@ py_test( name = "test_report_fault_tolerance", size = "medium", srcs = ["tests/test_report_fault_tolerance.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -302,7 +312,7 @@ py_test( name = "test_data_resource_cleanup", size = "medium", srcs = ["tests/test_data_resource_cleanup.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "data_integration", "exclusive", @@ -319,7 +329,7 @@ py_test( name = "test_dataset_manager", size = "medium", srcs = ["tests/test_dataset_manager.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "data_integration", "exclusive", @@ -336,7 +346,7 @@ py_test( name = "test_env_callbacks", size = "small", srcs = ["tests/test_env_callbacks.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -352,7 +362,7 @@ py_test( name = "test_failure_policy", size = "small", srcs = ["tests/test_failure_policy.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -368,7 +378,7 @@ py_test( name = "test_jax_elastic_e2e", size = "medium", srcs = ["tests/test_jax_elastic_e2e.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -384,7 +394,7 @@ py_test( name = "test_jax_trainer", size = "medium", srcs = ["tests/test_jax_trainer.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -400,7 +410,7 @@ py_test( name = "test_jax_gpu", size = "medium", srcs = ["tests/test_jax_gpu.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ # Temporarily disabled in CI: Ray GPU CI is on CUDA 12.1, but JAX wheels # do not support CUDA 12.1 (and older JAX versions were removed from PyPI). @@ -420,7 +430,7 @@ py_test( name = "test_lightgbm_trainer", size = "small", srcs = ["tests/test_lightgbm_trainer.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -436,7 +446,7 @@ py_test( name = "test_lightning_integration", size = "medium", srcs = ["tests/test_lightning_integration.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -452,7 +462,7 @@ py_test( name = "test_logging", size = "medium", srcs = ["tests/test_logging.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -468,7 +478,7 @@ py_test( name = "test_metrics", size = "small", srcs = ["tests/test_metrics.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -484,7 +494,7 @@ py_test( name = "test_persistence", size = "medium", srcs = ["tests/test_persistence.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -500,7 +510,7 @@ py_test( name = "test_report_handler", size = "small", srcs = ["tests/test_report_handler.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -516,7 +526,7 @@ py_test( name = "test_placement_group_cleaner", size = "small", srcs = ["tests/test_placement_group_cleaner.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -532,7 +542,7 @@ py_test( name = "test_placement_group_handle", size = "medium", srcs = ["tests/test_placement_group_handle.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -548,7 +558,7 @@ py_test( name = "test_preemption_watcher", size = "small", srcs = ["tests/test_preemption_watcher.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -564,7 +574,7 @@ py_test( name = "test_preemption_fault_tolerance", size = "medium", srcs = ["tests/test_preemption_fault_tolerance.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -580,7 +590,7 @@ py_test( name = "test_result", size = "medium", srcs = ["tests/test_result.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -596,7 +606,7 @@ py_test( name = "test_scheduling", size = "medium", srcs = ["tests/test_scheduling.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -612,7 +622,7 @@ py_test( name = "test_serialization", size = "small", srcs = ["tests/test_serialization.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -628,7 +638,7 @@ py_test( name = "test_state", size = "medium", srcs = ["tests/test_state.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -644,7 +654,7 @@ py_test( name = "test_state_export", size = "medium", srcs = ["tests/test_state_export.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -660,7 +670,7 @@ py_test( name = "test_storage", size = "small", srcs = ["tests/test_storage.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -676,7 +686,7 @@ py_test( name = "test_sync_actor", size = "small", srcs = ["tests/test_sync_actor.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -692,7 +702,7 @@ py_test( name = "test_telemetry", size = "medium", srcs = ["tests/test_telemetry.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -708,10 +718,7 @@ py_test( name = "test_tensorflow_trainer", size = "medium", srcs = ["tests/test_tensorflow_trainer.py"], - env = { - "RAY_TRAIN_V2_ENABLED": "1", - "TF_USE_LEGACY_KERAS": "1", - }, + env = _TRAIN_V2_TEST_ENV_TF, tags = [ "exclusive", "team:ml", @@ -727,7 +734,7 @@ py_test( name = "test_thread_runner", size = "small", srcs = ["tests/test_thread_runner.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -743,7 +750,7 @@ py_test( name = "test_torch_gpu", size = "large", srcs = ["tests/test_torch_gpu.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -759,7 +766,7 @@ py_test( name = "test_torch_trainer", size = "medium", srcs = ["tests/test_torch_trainer.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -776,7 +783,7 @@ py_test( name = "test_torch_transformers_train", size = "medium", srcs = ["tests/test_torch_transformers_train.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -792,7 +799,7 @@ py_test( name = "test_util", size = "medium", srcs = ["tests/test_util.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -808,7 +815,7 @@ py_test( name = "test_v2_api", size = "small", srcs = ["tests/test_v2_api.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -824,7 +831,7 @@ py_test( name = "test_worker", size = "small", srcs = ["tests/test_worker.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -840,7 +847,7 @@ py_test( name = "test_worker_group", size = "medium", srcs = ["tests/test_worker_group.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -856,7 +863,7 @@ py_test( name = "test_worker_group_poll_status", size = "small", srcs = ["tests/test_worker_group_poll_status.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -872,7 +879,7 @@ py_test( name = "test_xgboost_trainer", size = "small", srcs = ["tests/test_xgboost_trainer.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -888,10 +895,7 @@ py_test( name = "test_local_mode", size = "medium", srcs = ["tests/test_local_mode.py"], - env = { - "RAY_TRAIN_V2_ENABLED": "1", - "TF_USE_LEGACY_KERAS": "1", - }, + env = _TRAIN_V2_TEST_ENV_TF, tags = [ "exclusive", "team:ml", @@ -907,7 +911,7 @@ py_test( name = "test_data_config", size = "medium", srcs = ["tests/test_data_config.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _TRAIN_V2_TEST_ENV, tags = [ "data_integration", "exclusive", diff --git a/python/ray/train/v2/tests/conftest.py b/python/ray/train/v2/tests/conftest.py index 0d0802df2d5e..68bdd7528d19 100644 --- a/python/ray/train/v2/tests/conftest.py +++ b/python/ray/train/v2/tests/conftest.py @@ -1,4 +1,5 @@ import logging +import os import pytest @@ -10,6 +11,10 @@ ENABLE_STATE_ACTOR_RECONCILIATION_ENV_VAR, ) +# Keep the footer-reader pool tiny for Data-integrated train tests. Mirrored +# in python/ray/train/v2/BUILD.bazel for bazel test targets. +os.environ.setdefault("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", "1") + @pytest.fixture() def ray_start_4_cpus(): From 7758f262b74e09032dc52b2cf096c5e2e3c8de44 Mon Sep 17 00:00:00 2001 From: Goutam Date: Thu, 30 Jul 2026 15:40:55 -0700 Subject: [PATCH 011/135] [Data] Bump test_predicate_pushdown to medium size Signed-off-by: Goutam --- python/ray/data/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ray/data/BUILD.bazel b/python/ray/data/BUILD.bazel index b529e30c03cd..9fe0b354c666 100644 --- a/python/ray/data/BUILD.bazel +++ b/python/ray/data/BUILD.bazel @@ -1030,7 +1030,7 @@ py_test( py_test( name = "test_predicate_pushdown", - size = "small", + size = "medium", srcs = ["tests/test_predicate_pushdown.py"], tags = [ "exclusive", From 2024a400cc78f3e7f6fddb3c8bba314390bce51b Mon Sep 17 00:00:00 2001 From: Goutam Date: Thu, 30 Jul 2026 22:29:41 -0700 Subject: [PATCH 012/135] [Data] Pin 64MiB bin budget on tests that regressed at the 128MiB default Release build #102597 raised the footer indexer's fallback bin budget from 64 to 128 MiB. Comparing each test's delta-vs-its-own-master between #102329 and #102597, 24 of the 38 tests running on the fallback default got worse and 14 improved. This pins the 24 back to 64 MiB explicitly; the 14 keep following the raised default. The split is directional rather than arbitrary: among Parquet tests the regressions are read-dominated (read_parquet_autoscaling -20.9% -> +3.1%, read_large_parquet_autoscaling -8.1% -> +32.9%, count_parquet_autoscaling -15.4% -> -1.7%) while the improvements are shuffle/sort-heavy (random_shuffle_chaos +67.8% -> +14.9%, sort_fixed_size +22.2% -> +2.1%). Same tension the aggregate_groups and map_groups comments already describe. read_from_uris, iceberg_benchmark and iter_batches are split out of their matrices so only the affected variant is pinned and the others keep following the default. training_ingest_benchmark is pinned at block level with s3_read_images_gpu exempted. Caveats recorded in the per-test comments: - Eight of the 24 pins are inert. read_images_*, read_tfrecords and the s3_url_image_* / s3_read_images_cpu ingest variants do not read Parquet. mix reads 513 single-row-group files of ~88 MB, which pack one file per bin at both 64 and 128 MiB. These tests did move, but not because of this knob. - mix and distributed_training.chaos define their own runtime_env, which replaces the DEFAULTS list, so they already ran without the RAYTEST_* guards (and chaos without FOOTER_NUM_ACTORS=20). Left as-is rather than changed under cover of this commit. - The two builds differ by 46 merged master commits, so these deltas are not a controlled A/B of the budget alone. Verified by expanding the yaml through the same DEFAULTS/variations/matrix logic ray_release.config uses, before and after: test name set identical at 199, all 24 targets at 64 MiB, no non-target budget changed, no test lost or had an env var altered. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- release/release_data_tests.yaml | 207 ++++++++++++++++++++++++++++++-- 1 file changed, 200 insertions(+), 7 deletions(-) diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index dd9f9fa254bc..36e215c459c1 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -29,6 +29,16 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: both scaling variants regressed when the fallback default + # moved 64 -> 128 MiB (autoscaling -20.9% -> +3.1%, fixed_size -6.1% -> + # -3.8% vs master). Pinned to hold the 64 MiB behaviour. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 cluster_compute: "{{scaling}}_cpu_compute.yaml" matrix: @@ -75,6 +85,15 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: -8.1% vs master at 64 MiB, +32.9% once the fallback default + # moved to 128 MiB. The largest Parquet-path regression from that change. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 # Default budget: -25% vs master here, against +2% at 4 GiB. cluster_compute: "autoscaling_cpu_compute.yaml" @@ -90,6 +109,16 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: pinned for parity with the other read tests. NOTE: inert here -- + # this dataset is JPEG, not Parquet, so the bin budget cannot apply. Both + # variants did move (+36.9pp / +5.6pp) but the cause is elsewhere. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 cluster_compute: "{{scaling}}_cpu_compute.yaml" matrix: @@ -106,6 +135,14 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: pinned for parity. NOTE: inert -- tfrecords, not Parquet. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: timeout: 3600 script: > @@ -113,15 +150,34 @@ s3://ray-benchmark-data-internal-us-west-2/imagenet/tfrecords --format tfrecords --iter-bundles -- name: "read_from_uris_{{scaling}}" +# NOTE: the two scaling variants are spelled out rather than driven by a matrix +# because only the autoscaling one wants a pinned bin budget. Leaving +# fixed_size unpinned keeps it following the fallback default. +- name: "read_from_uris_fixed_size" python: "3.10" cluster: anyscale_sdk_2026: true - cluster_compute: "{{scaling}}_cpu_compute.yaml" + cluster_compute: "fixed_size_cpu_compute.yaml" - matrix: - setup: - scaling: [fixed_size, autoscaling] + run: + timeout: 5400 + script: python read_from_uris_benchmark.py + +- name: "read_from_uris_autoscaling" + python: "3.10" + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: -17.4% vs master at 64 MiB, +0.3% once the fallback default + # moved to 128 MiB. fixed_size was unaffected (-0.4% -> -2.1%), hence + # the split above. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 + cluster_compute: "autoscaling_cpu_compute.yaml" run: timeout: 5400 @@ -163,12 +219,34 @@ matrix: setup: - mode: [append, upsert, overwrite] + mode: [append, upsert] run: timeout: 4800 script: python iceberg_benchmark.py --mode {{mode}} +# Split out of the matrix above: only ``overwrite`` wants a pinned bin budget, +# so ``append``/``upsert`` keep following the fallback default. +- name: "iceberg_benchmark_overwrite" + python: "3.10" + cluster: + anyscale_sdk_2026: true + byod: + post_build_script: byod_install_pyiceberg.sh + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: +0.2% vs master at 64 MiB, +5.4% at 128 MiB. append/upsert + # were flat or improved, hence the split. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 + cluster_compute: iceberg_benchmark_compute.yaml + + run: + timeout: 4800 + script: python iceberg_benchmark.py --mode overwrite + ################### # Aggregation tests ################### @@ -177,6 +255,15 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: autoscaling went -15.4% -> -1.7% and fixed_size +2.6% -> +3.9% + # when the fallback default moved 64 -> 128 MiB. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 cluster_compute: "{{scaling}}_cpu_compute.yaml" matrix: @@ -652,12 +739,34 @@ variations: - __suffix__: 8ds_equal + cluster: + byod: + runtime_env: + # 64 MiB pin. NOTE: likely inert -- this dataset is 513 + # single-row-group files of ~88 MB, which pack one file per + # bin at both 64 and 128 MiB, so the granularity the block + # comment above describes is unchanged either way. Pinned + # because this variant moved (+17.0pp / +0.5pp) when the + # default changed; the cause is probably elsewhere. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=4 + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: script: > python dataset_mixing/mix_benchmark.py --num-datasets 8 --num-workers 16 --max-rows-per-worker 100000 - __suffix__: 8ds_power_law + cluster: + byod: + runtime_env: + # 64 MiB pin. NOTE: likely inert -- this dataset is 513 + # single-row-group files of ~88 MB, which pack one file per + # bin at both 64 and 128 MiB, so the granularity the block + # comment above describes is unchanged either way. Pinned + # because this variant moved (+17.0pp / +0.5pp) when the + # default changed; the cause is probably elsewhere. + - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=4 + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: script: > python dataset_mixing/mix_benchmark.py --num-datasets 8 @@ -712,6 +821,12 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=0 - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: +5.3% vs master at 64 MiB, +23.0% at 128 MiB. The + # ``regular`` variant went the other way, so only chaos is + # pinned. NOTE: this list replaces the parent's, so it also + # drops RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=20 -- pre-existing + # behaviour, left unchanged here. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: prepare: > python setup_chaos.py --kill-interval 200 --max-to-kill 1 --task-names @@ -723,6 +838,17 @@ cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: five of the six variants regressed when the fallback + # default moved 64 -> 128 MiB. s3_read_images_gpu improved and is + # exempted below. NOTE: the s3_url_image_* and s3_read_images_* + # variants read images, not Parquet, so the pin is inert for them. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 variations: - __suffix__: s3_parquet_cpu @@ -774,6 +900,15 @@ - __suffix__: s3_read_images_gpu cluster: + byod: + runtime_env: + # Exempt from the block-level 64 MiB pin: this variant improved + # at the 128 MiB default (-1.5% -> -2.4%), so it keeps following + # the default. + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 cluster_compute: dataset/fixed_size_xlarge_gpu_compute.yaml run: timeout: 4800 @@ -849,7 +984,7 @@ anyscale_sdk_2026: true matrix: setup: - format: [numpy, pandas, pyarrow] + format: [numpy, pandas] run: timeout: 2400 @@ -858,10 +993,42 @@ s3://ray-benchmark-data/tpch/parquet/sf10/lineitem --format parquet --iter-batches {{format}} +# Split out of the matrix above: only the pyarrow format wants a pinned bin +# budget, so numpy/pandas keep following the fallback default. +- name: "iter_batches_pyarrow" + python: "3.10" + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: -2.2% vs master at 64 MiB, -0.0% at 128 MiB. numpy and pandas + # both improved at 128 MiB, hence the split. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 + cluster_compute: fixed_size_cpu_compute.yaml + + run: + timeout: 2400 + script: > + python read_and_consume_benchmark.py + s3://ray-benchmark-data/tpch/parquet/sf10/lineitem --format parquet + --iter-batches pyarrow + - name: to_tf python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: +1.1% -> +4.4% vs master when the default moved to 128 MiB. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: timeout: 2400 script: > @@ -873,6 +1040,14 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: -0.1% -> +1.1% vs master when the default moved to 128 MiB. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 cluster_compute: fixed_size_gpu_head_compute.yaml run: @@ -890,6 +1065,14 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: -17.1% -> -14.1% vs master when the default moved to 128 MiB. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: timeout: 1800 script: python map_benchmark.py --api map --sf 100 @@ -898,6 +1081,14 @@ python: "3.10" cluster: anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: -23.2% -> -15.5% vs master when the default moved to 128 MiB. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: timeout: 1800 script: python map_benchmark.py --api flat_map --sf 100 @@ -1046,6 +1237,8 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=1 - RAYTEST_FAIL_ON_SPILLING=0 + # 64 MiB: -2.4% -> +4.0% vs master when the default moved to 128 MiB. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 cluster_compute: "{{scaling}}_all_to_all_compute.yaml" run: From bc82996867e107467a19defaa7d192cc5ffde420 Mon Sep 17 00:00:00 2001 From: Goutam Date: Thu, 30 Jul 2026 22:35:24 -0700 Subject: [PATCH 013/135] [Data] Default footer actor pool to 1 for air tests and the xgboost smoke test Extends the pattern from 74e599b17d to two more test surfaces. The Parquet footer indexer's production default of 32 actors times out and trips Ray's "too many worker processes" warning when many test targets run in parallel under CI. - python/ray/air/BUILD.bazel gets three shared env dicts (_AIR_TEST_ENV, _AIR_TEST_ENV_TRAIN_V1, _AIR_TEST_ENV_TF) replacing the repeated per-target literals, so all 20 py_test targets under python/ray/air/tests get RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=1. The three dicts preserve the existing RAY_TRAIN_V2_ENABLED 1-vs-0 split, which six of those targets depend on. - python/ray/air/tests/conftest.py setdefaults the same var so non-bazel pytest runs match. This also covers tests/execution, which has no conftest of its own. - //release:xgboost_train_batch_inference_benchmark_smoke_test gets the var inline; a shared dict would be indirection for a single target. Verified by resolving each air target's env before and after: 20/20 now set the var and no target had any other env value change. Not included: the py_doctest[air] target, whose glob excludes tests/**, and the four sibling smoke tests in release/BUILD.bazel that carry the same RAY_TRAIN_V2_ENABLED=1 env (air_benchmark_gpu_batch_inference_parquet in particular reads Parquet and will likely want the same treatment). AI assistance was used for this change. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- python/ray/air/BUILD.bazel | 66 +++++++++++++++++++++----------- python/ray/air/tests/conftest.py | 7 ++++ release/BUILD.bazel | 8 +++- 3 files changed, 57 insertions(+), 24 deletions(-) diff --git a/python/ray/air/BUILD.bazel b/python/ray/air/BUILD.bazel index 0c119c16cf2b..57dbaaecab92 100644 --- a/python/ray/air/BUILD.bazel +++ b/python/ray/air/BUILD.bazel @@ -1,6 +1,29 @@ load("@rules_python//python:defs.bzl", "py_library", "py_test") load("//bazel:python.bzl", "doctest") +# Shared env for the python/ray/air/tests targets. ``RAY_DATA_PARQUET_FOOTER_ +# NUM_ACTORS=1`` keeps the Parquet footer-reader pool tiny: the production +# default of 32 actors times out and trips Ray's "too many worker processes" +# warning when many test targets run in parallel under CI. Mirrored by a +# setdefault in python/ray/air/tests/conftest.py for non-bazel pytest runs. +_AIR_TEST_ENV = { + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS": "1", + "RAY_TRAIN_V2_ENABLED": "1", +} + +# Same, for the targets that pin Train V1 telemetry/behaviour. +_AIR_TEST_ENV_TRAIN_V1 = { + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS": "1", + "RAY_TRAIN_V2_ENABLED": "0", +} + +# Same, plus legacy Keras for the Keras callback test. +_AIR_TEST_ENV_TF = { + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS": "1", + "RAY_TRAIN_V2_ENABLED": "1", + "TF_USE_LEGACY_KERAS": "1", +} + doctest( name = "py_doctest[air]", env = {"RAY_TRAIN_V2_ENABLED": "1"}, @@ -31,7 +54,7 @@ py_test( size = "small", srcs = ["tests/test_air_usage.py"], # NOTE: This tests Train V1 telemetry. - env = {"RAY_TRAIN_V2_ENABLED": "0"}, + env = _AIR_TEST_ENV_TRAIN_V1, tags = [ "exclusive", "team:ml", @@ -44,7 +67,7 @@ py_test( size = "large", srcs = ["tests/test_new_dataset_config.py"], # NOTE: Relevant tests moved to train/v2/tests/test_data_integration.py - env = {"RAY_TRAIN_V2_ENABLED": "0"}, + env = _AIR_TEST_ENV_TRAIN_V1, tags = [ "exclusive", "team:ml", @@ -60,7 +83,7 @@ py_test( "tests/test_experiment_restore.py", ], # NOTE: This tests Tune and Train V1 restoration. - env = {"RAY_TRAIN_V2_ENABLED": "0"}, + env = _AIR_TEST_ENV_TRAIN_V1, tags = [ "exclusive", "team:ml", @@ -73,7 +96,7 @@ py_test( size = "medium", srcs = ["tests/test_errors.py"], # NOTE: This tests Tune (Train V1) error propagation logic. - env = {"RAY_TRAIN_V2_ENABLED": "0"}, + env = _AIR_TEST_ENV_TRAIN_V1, tags = [ "exclusive", "team:ml", @@ -86,7 +109,7 @@ py_test( size = "small", srcs = ["tests/test_integration_comet.py"], # NOTE: This tests the Tune Comet callback. - env = {"RAY_TRAIN_V2_ENABLED": "0"}, + env = _AIR_TEST_ENV_TRAIN_V1, tags = [ "exclusive", "team:ml", @@ -99,7 +122,7 @@ py_test( size = "small", srcs = ["tests/test_integration_wandb.py"], # NOTE: This tests the Tune wandb callback. - env = {"RAY_TRAIN_V2_ENABLED": "0"}, + env = _AIR_TEST_ENV_TRAIN_V1, tags = [ "exclusive", "team:ml", @@ -112,7 +135,7 @@ py_test( size = "medium", srcs = ["tests/test_integration_mlflow.py"], # NOTE: This tests the Tune mlflow callback. - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -124,10 +147,7 @@ py_test( name = "test_keras_callback", size = "medium", srcs = ["tests/test_keras_callback.py"], - env = { - "RAY_TRAIN_V2_ENABLED": "1", - "TF_USE_LEGACY_KERAS": "1", - }, + env = _AIR_TEST_ENV_TF, tags = [ "exclusive", "team:ml", @@ -139,7 +159,7 @@ py_test( name = "test_remote_storage_hdfs", size = "small", srcs = ["tests/test_remote_storage_hdfs.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "hdfs", @@ -152,7 +172,7 @@ py_test( name = "test_tracebacks", size = "small", srcs = ["tests/test_tracebacks.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -164,7 +184,7 @@ py_test( name = "test_utils", size = "small", srcs = ["tests/test_utils.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -183,7 +203,7 @@ py_test( name = "test_barrier", size = "small", srcs = ["tests/execution/test_barrier.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -195,7 +215,7 @@ py_test( name = "test_e2e_train_flow", size = "medium", srcs = ["tests/execution/test_e2e_train_flow.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -207,7 +227,7 @@ py_test( name = "test_e2e_tune_flow", size = "medium", srcs = ["tests/execution/test_e2e_tune_flow.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -219,7 +239,7 @@ py_test( name = "test_event_manager", size = "medium", srcs = ["tests/execution/test_event_manager.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -231,7 +251,7 @@ py_test( name = "test_resource_manager_fixed", size = "small", srcs = ["tests/execution/test_resource_manager_fixed.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -243,7 +263,7 @@ py_test( name = "test_resource_manager_placement_group", size = "medium", srcs = ["tests/execution/test_resource_manager_placement_group.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -255,7 +275,7 @@ py_test( name = "test_resource_request", size = "small", srcs = ["tests/execution/test_resource_request.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -267,7 +287,7 @@ py_test( name = "test_tracked_actor", size = "small", srcs = ["tests/execution/test_tracked_actor.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", @@ -279,7 +299,7 @@ py_test( name = "test_tracked_actor_task", size = "small", srcs = ["tests/execution/test_tracked_actor_task.py"], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = _AIR_TEST_ENV, tags = [ "exclusive", "team:ml", diff --git a/python/ray/air/tests/conftest.py b/python/ray/air/tests/conftest.py index 6595beb4b40b..e5aaa5062e90 100644 --- a/python/ray/air/tests/conftest.py +++ b/python/ray/air/tests/conftest.py @@ -1,11 +1,18 @@ # Trigger pytest hook to automatically zip test cluster logs to archive dir on failure import copy +import os import pytest import ray from ray.tests.conftest import pytest_runtest_makereport # noqa +# Keep the Parquet footer-reader pool tiny for these tests. The production +# default of 32 actors times out under CI parallelism; tests that need a larger +# pool can override with monkeypatch.setenv. Mirrored in +# python/ray/air/BUILD.bazel for bazel test targets. +os.environ.setdefault("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", "1") + @pytest.fixture def restore_data_context(request): diff --git a/release/BUILD.bazel b/release/BUILD.bazel index b03048235b52..c7fdd6669b81 100644 --- a/release/BUILD.bazel +++ b/release/BUILD.bazel @@ -111,7 +111,13 @@ py_test( "xgboost", "--smoke-test", ], - env = {"RAY_TRAIN_V2_ENABLED": "1"}, + env = { + # Keep the Parquet footer-reader pool tiny: the production default of 32 + # actors times out and trips Ray's "too many worker processes" warning + # under CI parallelism. + "RAY_DATA_PARQUET_FOOTER_NUM_ACTORS": "1", + "RAY_TRAIN_V2_ENABLED": "1", + }, main = "train_tests/xgboost_lightgbm/train_batch_inference_benchmark.py", tags = [ "exclusive", From b2fa8e1f6f7c6c3b5c94f660e34619af94710e9d Mon Sep 17 00:00:00 2001 From: Goutam Date: Fri, 31 Jul 2026 15:10:30 -0700 Subject: [PATCH 014/135] [Data] Let footer reader actors reserve a CPU; lower scale-up threshold for map_batches release test Signed-off-by: Goutam --- .../ray/data/_internal/datasource_v2/listing/footer_reader.py | 2 +- release/release_data_tests.yaml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py index 99d9592112dd..54e8fcc60486 100644 --- a/python/ray/data/_internal/datasource_v2/listing/footer_reader.py +++ b/python/ray/data/_internal/datasource_v2/listing/footer_reader.py @@ -247,4 +247,4 @@ def read_footers( # The Ray actor class. Built via the functional ``ray.remote(...)`` form (rather # than the ``@ray.remote`` decorator) so ``FooterReader`` stays a plain class and # actor handles can be typed ``ActorProxy[FooterReader]``. -FooterReaderActor = ray.remote(num_cpus=0)(FooterReader) +FooterReaderActor = ray.remote(FooterReader) diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 36e215c459c1..6bb45d03bce8 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -1134,6 +1134,7 @@ # three row groups exceed it, so bins take two and sit 24% empty, giving # 24.5k read tasks (measured 24,432). - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1073741824 + - RAY_DATA_CLUSTER_SCALING_UP_UTIL_THRESHOLD=0.6 cluster_compute: "{{scaling}}_cpu_compute.yaml" run: From 2c2e152cbd2385cc19beacbb22bc7fedc529383c Mon Sep 17 00:00:00 2001 From: Goutam Date: Fri, 31 Jul 2026 18:38:50 -0700 Subject: [PATCH 015/135] [Data] Derive ListFiles pushdown state from the ReadFiles scanner ListFiles.predicate / projected_columns / limit were mirrored onto the op by hand from three separate rules (predicate, projection and limit pushdown). Nothing enforced the invariant those copies rest on -- that ListFiles never prunes by more than the downstream ReadFiles actually applies -- so a future rule that rewrote or dropped the scanner's predicate without re-syncing would leave ListFiles pruning row groups the reader would have kept, dropping rows with no error. Replace the mirroring with DeriveListFilesPushdown, which recomputes every ListFiles' state from its consuming ReadFiles scanner. It runs in LogicalOptimizer._post_optimize, after the rule loop reaches a fixed point, and derives unconditionally in both directions: a ListFiles whose consumer is not a ReadFiles is reset to no constraints. The worst a future rule can now cause is listing more than it needs to. Also replace the getattr(scanner, "predicate", None) access with abstract pushed_predicate() / pushed_limit() accessors on the scanner mixins, mirroring the existing pruned_column_names(), so a field rename is a type error rather than a silent no-op. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../datasource_v2/logical_optimizers.py | 77 +++--- .../scanners/arrow_file_scanner.py | 8 + .../ray/data/_internal/logical/optimizers.py | 9 +- .../data/_internal/logical/rules/__init__.py | 2 + .../rules/derive_list_files_pushdown.py | 89 +++++++ .../_internal/logical/rules/limit_pushdown.py | 13 +- .../logical/rules/predicate_pushdown.py | 28 +-- .../logical/rules/projection_pushdown.py | 12 +- .../test_derive_list_files_pushdown.py | 224 ++++++++++++++++++ 9 files changed, 383 insertions(+), 79 deletions(-) create mode 100644 python/ray/data/_internal/logical/rules/derive_list_files_pushdown.py create mode 100644 python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py diff --git a/python/ray/data/_internal/datasource_v2/logical_optimizers.py b/python/ray/data/_internal/datasource_v2/logical_optimizers.py index aee596717747..ef347a73310a 100644 --- a/python/ray/data/_internal/datasource_v2/logical_optimizers.py +++ b/python/ray/data/_internal/datasource_v2/logical_optimizers.py @@ -1,5 +1,4 @@ from abc import ABC, abstractmethod -from dataclasses import replace from typing import TYPE_CHECKING, List, Optional, Set, Tuple from ray.data.expressions import Expr @@ -7,7 +6,6 @@ if TYPE_CHECKING: from ray.data._internal.datasource_v2.scanners.scanner import Scanner - from ray.data._internal.logical.interfaces import LogicalOperator @DeveloperAPI @@ -33,6 +31,18 @@ def push_filters(self, predicate: "Expr") -> Tuple["Scanner", Optional["Expr"]]: """ ... + @abstractmethod + def pushed_predicate(self) -> Optional["Expr"]: + """The predicate this scanner will apply at read time, if any. + + This is the accepted result of :meth:`push_filters`, not the predicate + that was offered to it. Planning derives upstream listing-time pruning + from this value, so it must never be stronger than what the scanner + actually evaluates -- returning ``None`` is always safe, returning a + predicate the reader does not apply drops rows. + """ + ... + @DeveloperAPI class SupportsColumnPruning(ABC): @@ -86,6 +96,16 @@ def push_limit(self, limit: int) -> "Scanner": """ ... + @abstractmethod + def pushed_limit(self) -> Optional[int]: + """The row limit this scanner will stop at, if any. + + This is the accepted result of :meth:`push_limit`. Planning derives + early-stop listing from it, so it must never be smaller than the limit + the scanner actually honors. + """ + ... + @DeveloperAPI class SupportsPartitionPruning(ABC): @@ -124,36 +144,24 @@ def prune_partitions(self, predicate: "Expr") -> "Scanner": ... -def sync_list_files_pushdown(read_files: "LogicalOperator") -> "LogicalOperator": - """Mirror a ``ReadFiles`` scanner's pushed-down state onto its ``ListFiles``. +def derive_list_files_pushdown( + scanner: Optional["Scanner"], +) -> Tuple[Optional["Expr"], Optional[List[str]], Optional[int]]: + """Read the pushed-down state a scanner accepted, for upstream listing. - Called by the predicate / projection / limit pushdown rules after they push - onto the ``ReadFiles`` scanner. A metadata-aware indexer (e.g. the - footer-based Parquet indexer) reads ``predicate`` / ``projected_columns`` / - ``limit`` off ``ListFiles`` at planning time to prune row groups, size only - projected columns, and stop listing early. + Returns ``(predicate, projected_columns, limit)`` -- the constraints a + ``ListFiles`` feeding this scanner's ``ReadFiles`` may safely apply while + listing (see :class:`~ray.data._internal.logical.rules. + derive_list_files_pushdown.DeriveListFilesPushdown`). Each element is + ``None`` unless the scanner both implements the corresponding ``Supports*`` + mixin and reports state it actually accepted, so a datasource that ignores + a pushdown can never cause listing-time pruning. - Reads the pushed state straight from the scanner, so it is inherently gated - on the datasource supporting each pushdown -- the scanner only carries state - it actually accepted (via the ``Supports*`` mixins here). No-op unless - ``read_files`` is a ``ReadFiles`` whose immediate input is a ``ListFiles``. + ``scanner`` may be ``None`` (no downstream reader), which yields all-``None``: + nothing downstream applies these constraints, so listing must not either. """ - from ray.data._internal.logical.operators.read_operator import ( - ListFiles, - ReadFiles, - ) - - if not isinstance(read_files, ReadFiles): - return read_files - if not read_files.input_dependencies: - return read_files - upstream = read_files.input_dependencies[0] - if not isinstance(upstream, ListFiles): - return read_files - - scanner = read_files.scanner predicate = ( - getattr(scanner, "predicate", None) + scanner.pushed_predicate() if isinstance(scanner, SupportsFilterPushdown) else None ) @@ -163,15 +171,6 @@ def sync_list_files_pushdown(read_files: "LogicalOperator") -> "LogicalOperator" else: projected_columns = None limit = ( - getattr(scanner, "limit", None) - if isinstance(scanner, SupportsLimitPushdown) - else None - ) - - new_list_files = replace( - upstream, - predicate=predicate, - projected_columns=projected_columns, - limit=limit, + scanner.pushed_limit() if isinstance(scanner, SupportsLimitPushdown) else None ) - return replace(read_files, input_dependencies=[new_list_files]) + return predicate, projected_columns, limit diff --git a/python/ray/data/_internal/datasource_v2/scanners/arrow_file_scanner.py b/python/ray/data/_internal/datasource_v2/scanners/arrow_file_scanner.py index 2641e0439a3f..907f3b089162 100644 --- a/python/ray/data/_internal/datasource_v2/scanners/arrow_file_scanner.py +++ b/python/ray/data/_internal/datasource_v2/scanners/arrow_file_scanner.py @@ -110,6 +110,10 @@ def push_filters( return replace(self, predicate=combined), None + @override + def pushed_predicate(self) -> Optional["Expr"]: + return self.predicate + @override def prune_columns(self, columns: List[str]) -> "ArrowFileScanner": """Prune to only the specified columns. @@ -144,6 +148,10 @@ def push_limit(self, limit: int) -> "ArrowFileScanner": new_limit = min(current, limit) if current is not None else limit return replace(self, limit=new_limit) + @override + def pushed_limit(self) -> Optional[int]: + return self.limit + @override def prune_partitions(self, predicate: "Expr") -> "ArrowFileScanner": """Store a partition predicate for file-level pruning during plan(). diff --git a/python/ray/data/_internal/logical/optimizers.py b/python/ray/data/_internal/logical/optimizers.py index a8b1f7b14a0d..59c0952d15f0 100644 --- a/python/ray/data/_internal/logical/optimizers.py +++ b/python/ray/data/_internal/logical/optimizers.py @@ -16,6 +16,7 @@ CombineShuffles, CommonSubExprElimination, ConfigureMapTaskMemoryUsingOutputSize, + DeriveListFilesPushdown, FuseOperators, InheritTargetMaxBlockSizeRule, LimitPushdownRule, @@ -67,7 +68,13 @@ def _post_optimize(self, plan: LogicalPlan) -> LogicalPlan: # CommonSubExprElimination is only supposed to run once # isolated from the optimizer rule loop as it applies to # a single Projection operator not a chain of operators. - return CommonSubExprElimination().apply(plan) + plan = CommonSubExprElimination().apply(plan) + # Must run last, over the final plan: it derives each ``ListFiles``' + # listing-time constraints from the scanner of the ``ReadFiles`` that + # consumes it. Running it earlier (or as a ruleset entry, which a + # caller-added rule could follow) would let a later rewrite leave + # ``ListFiles`` pruning by a predicate the reader no longer applies. + return DeriveListFilesPushdown().apply(plan) class PhysicalOptimizer(Optimizer): diff --git a/python/ray/data/_internal/logical/rules/__init__.py b/python/ray/data/_internal/logical/rules/__init__.py index ae93a545fe4e..405105849abb 100644 --- a/python/ray/data/_internal/logical/rules/__init__.py +++ b/python/ray/data/_internal/logical/rules/__init__.py @@ -6,6 +6,7 @@ ConfigureMapTaskMemoryRule, ConfigureMapTaskMemoryUsingOutputSize, ) +from .derive_list_files_pushdown import DeriveListFilesPushdown from .inherit_target_max_block_size import InheritTargetMaxBlockSizeRule from .limit_pushdown import LimitPushdownRule from .operator_fusion import FuseOperators, are_remote_args_compatible @@ -22,6 +23,7 @@ "CommonSubExprElimination", "ConfigureMapTaskMemoryRule", "ConfigureMapTaskMemoryUsingOutputSize", + "DeriveListFilesPushdown", "FuseOperators", "InheritTargetMaxBlockSizeRule", "LimitPushdownRule", diff --git a/python/ray/data/_internal/logical/rules/derive_list_files_pushdown.py b/python/ray/data/_internal/logical/rules/derive_list_files_pushdown.py new file mode 100644 index 000000000000..c19b482f1a8d --- /dev/null +++ b/python/ray/data/_internal/logical/rules/derive_list_files_pushdown.py @@ -0,0 +1,89 @@ +"""Derive ``ListFiles`` pushdown state from its consuming ``ReadFiles`` scanner. + +This is the single source of truth for the read constraints a ``ListFiles`` +applies while listing. It runs once, after every other logical rule, so no rule +has to remember to keep the two operators in sync. +""" +from dataclasses import replace +from typing import List + +from ray.data._internal.datasource_v2.logical_optimizers import ( + derive_list_files_pushdown, +) +from ray.data._internal.logical.interfaces import LogicalOperator, LogicalPlan, Rule +from ray.data._internal.logical.operators.read_operator import ListFiles, ReadFiles + +__all__ = [ + "DeriveListFilesPushdown", +] + + +class DeriveListFilesPushdown(Rule): + """Recompute every ``ListFiles``' pushed-down read constraints from scratch. + + A metadata-aware indexer (e.g. the footer-based Parquet indexer) reads + ``predicate`` / ``projected_columns`` / ``limit`` off ``ListFiles`` at + planning time to prune row groups by their statistics, size only projected + columns, and stop listing early. Those constraints are only sound if they + are no stronger than what the downstream ``ReadFiles`` actually applies -- + a predicate on ``ListFiles`` that the reader does not evaluate prunes row + groups nobody re-checks, silently dropping rows. + + Rather than have each pushdown rule mirror its own state onto ``ListFiles`` + (an invariant every future rule would have to re-establish by hand), this + rule derives the state from the consuming ``ReadFiles`` scanner and + overwrites whatever was there. Deriving is unconditional in both + directions: a ``ListFiles`` whose consumer is not a ``ReadFiles`` -- e.g. + after ``PushdownCountFiles`` rewrites the plan -- is reset to no + constraints. So a rule that weakens or drops a scanner's predicate + automatically weakens listing too, and the worst a future rule can cause is + listing more than it needs to. + + Runs in ``LogicalOptimizer._post_optimize``, i.e. after the rule loop has + reached a fixed point, so it observes each scanner's final state. + """ + + def apply(self, plan: LogicalPlan) -> LogicalPlan: # pyrefly: ignore[bad-override] + def transform(node: LogicalOperator) -> LogicalOperator: + inputs = node.input_dependencies + if not any(isinstance(input_op, ListFiles) for input_op in inputs): + return node + + # ``ReadFiles`` is the only consumer that applies these constraints + # downstream; for anything else they must be dropped. + scanner = node.scanner if isinstance(node, ReadFiles) else None + predicate, projected_columns, limit = derive_list_files_pushdown(scanner) + + new_inputs: List[LogicalOperator] = [] + changed = False + for input_op in inputs: + if isinstance(input_op, ListFiles) and ( + input_op.predicate is not predicate + or input_op.projected_columns != projected_columns + or input_op.limit != limit + ): + input_op = replace( + input_op, + predicate=predicate, + projected_columns=projected_columns, + limit=limit, + ) + changed = True + new_inputs.append(input_op) + + if not changed: + return node + return node._with_new_input_dependencies(new_inputs) + + dag = plan.dag._apply_transform(transform) + + # A bare ``ListFiles`` root has no consumer at all, so nothing above + # applies its constraints either. + if isinstance(dag, ListFiles) and ( + dag.predicate is not None + or dag.projected_columns is not None + or dag.limit is not None + ): + dag = replace(dag, predicate=None, projected_columns=None, limit=None) + + return LogicalPlan(dag=dag, context=plan.context) diff --git a/python/ray/data/_internal/logical/rules/limit_pushdown.py b/python/ray/data/_internal/logical/rules/limit_pushdown.py index 6119ef64c116..8e3bfe3da6aa 100644 --- a/python/ray/data/_internal/logical/rules/limit_pushdown.py +++ b/python/ray/data/_internal/logical/rules/limit_pushdown.py @@ -242,16 +242,15 @@ def _apply_per_block_limit_if_supported( if isinstance(op, ReadFiles): from ray.data._internal.datasource_v2.logical_optimizers import ( SupportsLimitPushdown, - sync_list_files_pushdown, ) if isinstance(op.scanner, SupportsLimitPushdown): - # Mirror the pushed limit onto the upstream ``ListFiles`` - # so a footer-based indexer can stop listing early once - # enough exact-survivor rows are found. - return sync_list_files_pushdown( - replace(op, scanner=op.scanner.push_limit(limit)) - ) + # The pushed limit reaches the upstream ``ListFiles`` -- + # letting a footer-based indexer stop listing early once + # enough exact-survivor rows are found -- via + # ``DeriveListFilesPushdown``, which reads it off the + # scanner once the plan is final. + return replace(op, scanner=op.scanner.push_limit(limit)) return op assert len(op.input_dependencies) == 1, len(op.input_dependencies) return replace( diff --git a/python/ray/data/_internal/logical/rules/predicate_pushdown.py b/python/ray/data/_internal/logical/rules/predicate_pushdown.py index 88b0a11829f3..edc56eca95d2 100644 --- a/python/ray/data/_internal/logical/rules/predicate_pushdown.py +++ b/python/ray/data/_internal/logical/rules/predicate_pushdown.py @@ -286,30 +286,10 @@ def _try_push_down_predicate(cls, op: LogicalOperator) -> LogicalOperator: if result_op is input_op: return filter_op - # Mirror the pushed (data-column) predicate onto an upstream - # ``ListFiles`` so a footer-based indexer can skip row groups by - # their statistics. ``apply_predicate`` may wrap the ``ReadFiles`` in - # a ``Filter`` (partition residual); sync the ``ReadFiles`` in either - # shape. No-op for datasources without a ``ListFiles``. - from ray.data._internal.datasource_v2.logical_optimizers import ( - sync_list_files_pushdown, - ) - from ray.data._internal.logical.operators.read_operator import ( - ReadFiles, - ) - - if isinstance(result_op, ReadFiles): - result_op = sync_list_files_pushdown(result_op) - elif ( - isinstance(result_op, Filter) - and result_op.input_dependencies - and isinstance(result_op.input_dependencies[0], ReadFiles) - ): - synced = sync_list_files_pushdown(result_op.input_dependencies[0]) - result_op = Filter( - predicate_expr=result_op.predicate_expr, - input_dependencies=[synced], - ) + # The pushed (data-column) predicate reaches an upstream + # ``ListFiles`` -- letting a footer-based indexer skip row groups by + # their statistics -- via ``DeriveListFilesPushdown``, which reads it + # off the scanner once the plan is final. Nothing to mirror here. # Convertible conjuncts were pushed into the read. Re-apply any # residual (non-convertible) conjuncts as a Filter above it. diff --git a/python/ray/data/_internal/logical/rules/projection_pushdown.py b/python/ray/data/_internal/logical/rules/projection_pushdown.py index f251c7a72416..c03b88b617c4 100644 --- a/python/ray/data/_internal/logical/rules/projection_pushdown.py +++ b/python/ray/data/_internal/logical/rules/projection_pushdown.py @@ -471,15 +471,11 @@ def _push_projection_into_read_op(cls, op: LogicalOperator) -> LogicalOperator: if required_columns is None else {name: name for name in required_columns} ) + # The pruned columns reach an upstream ``ListFiles`` -- letting a + # footer-based indexer size only projected columns -- via + # ``DeriveListFilesPushdown``, which reads them off the scanner once + # the plan is final. Nothing to mirror here. projected_input_op = input_op.apply_projection(projection_map) - # Mirror the pruned columns onto an upstream ``ListFiles`` (if any) - # so a footer-based indexer sizes only projected columns. No-op for - # datasources without a ``ListFiles`` / column-pruning support. - from ray.data._internal.datasource_v2.logical_optimizers import ( - sync_list_files_pushdown, - ) - - projected_input_op = sync_list_files_pushdown(projected_input_op) # If the ``Project`` is a pure-prune (only ``col()`` refs, # no renames, no computed expressions), the projection diff --git a/python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py b/python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py new file mode 100644 index 000000000000..dc80810aa920 --- /dev/null +++ b/python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py @@ -0,0 +1,224 @@ +"""Unit tests for :class:`DeriveListFilesPushdown`. + +``ListFiles`` prunes row groups, sizes columns, and stops listing early using +the constraints it carries. Those constraints are only sound while they are no +stronger than what the downstream ``ReadFiles`` scanner actually applies -- a +predicate ``ListFiles`` prunes by but the reader never evaluates drops rows +with no error. These tests pin that invariant, including for plan shapes no +current rule produces but a future one could. +""" +from dataclasses import replace +from pathlib import Path +from typing import List + +import pyarrow as pa +import pyarrow.parquet as pq +import pytest + +from ray.data._internal.datasource_v2.listing.file_indexer import ( + NonSamplingFileIndexer, +) +from ray.data._internal.datasource_v2.listing.listing_utils import sample_files +from ray.data._internal.datasource_v2.parquet_datasource_v2 import ( + ParquetDatasourceV2, +) +from ray.data._internal.logical.interfaces import LogicalOperator, LogicalPlan, Rule +from ray.data._internal.logical.operators import ListFiles, ReadFiles +from ray.data._internal.logical.operators.map_operator import MapBatches +from ray.data._internal.logical.optimizers import LogicalOptimizer, get_logical_ruleset +from ray.data._internal.logical.rules.derive_list_files_pushdown import ( + DeriveListFilesPushdown, +) +from ray.data.context import DataContext +from ray.data.expressions import col + + +def _mk_read_files(tmp_path: Path) -> ReadFiles: + """A minimal ``ListFiles -> ReadFiles`` chain over one Parquet file.""" + f = tmp_path / "data.parquet" + pq.write_table(pa.table({"a": [1, 2, 3], "b": ["x", "y", "z"]}), str(f)) + + datasource = ParquetDatasourceV2([str(f)]) + indexer = NonSamplingFileIndexer(ignore_missing_paths=False) + sample = sample_files(indexer, datasource.paths, datasource.filesystem) + schema = datasource.infer_schema(sample) + + list_files_op = ListFiles( + paths=list(datasource.paths), + file_indexer=indexer, + filesystem=datasource.filesystem, + source_paths=list(datasource.paths), + file_extensions=datasource.file_extensions, + ) + return ReadFiles( + datasource_name=datasource.name, + scanner=datasource.create_scanner(schema=schema), + schema=schema, + parallelism=-1, + input_dependencies=[list_files_op], + ) + + +def _apply(dag: LogicalOperator) -> LogicalPlan: + plan = LogicalPlan(dag=dag, context=DataContext.get_current()) + return DeriveListFilesPushdown().apply(plan) + + +def _list_files_of(plan: LogicalPlan) -> ListFiles: + (list_files,) = [ + op for op in plan.dag.post_order_iter() if isinstance(op, ListFiles) + ] + return list_files + + +def test_derives_state_the_scanner_accepted(tmp_path): + read_files = _mk_read_files(tmp_path) + predicate = col("a") > 2 + scanner, _residual = read_files.scanner.push_filters(predicate) + scanner = scanner.prune_columns(["a"]).push_limit(5) + read_files = replace(read_files, scanner=scanner) + + list_files = _list_files_of(_apply(read_files)) + + assert list_files.predicate is predicate + assert list_files.projected_columns == ["a"] + assert list_files.limit == 5 + + +def test_no_pushdown_leaves_list_files_unconstrained(tmp_path): + list_files = _list_files_of(_apply(_mk_read_files(tmp_path))) + + assert list_files.predicate is None + assert list_files.projected_columns is None + assert list_files.limit is None + + +@pytest.mark.parametrize( + "stale", + [ + {"predicate": col("a") > 2}, + {"projected_columns": ["a"]}, + {"limit": 1}, + {"predicate": col("a") > 2, "projected_columns": ["a"], "limit": 1}, + ], + ids=["predicate", "columns", "limit", "all"], +) +def test_state_the_scanner_does_not_carry_is_cleared(tmp_path, stale): + """The failure the rule exists to prevent. + + A ``ListFiles`` carrying constraints its ``ReadFiles`` does not apply -- + e.g. a rewrite dropped or weakened the scanner's predicate -- would prune + row groups nothing downstream re-checks. + """ + read_files = _mk_read_files(tmp_path) + read_files = replace( + read_files, + input_dependencies=[replace(read_files.input_dependencies[0], **stale)], + ) + + list_files = _list_files_of(_apply(read_files)) + + assert list_files.predicate is None + assert list_files.projected_columns is None + assert list_files.limit is None + + +def test_state_is_cleared_when_consumer_is_not_read_files(tmp_path): + """``PushdownCountFiles`` rewrites ``ReadFiles`` out of the plan entirely.""" + read_files = _mk_read_files(tmp_path) + list_files = replace( + read_files.input_dependencies[0], predicate=col("a") > 2, limit=1 + ) + count_rows = MapBatches( + fn=lambda batch: batch, + input_dependencies=[list_files], + batch_format="pyarrow", + can_modify_num_rows=True, + ) + + derived = _list_files_of(_apply(count_rows)) + + assert derived.predicate is None + assert derived.limit is None + + +def test_bare_list_files_root_is_cleared(tmp_path): + read_files = _mk_read_files(tmp_path) + list_files = replace(read_files.input_dependencies[0], predicate=col("a") > 2) + + assert _list_files_of(_apply(list_files)).predicate is None + + +class _WeakenScannerPredicate(Rule): + """Stand-in for a future rule that rewrites the scanner's predicate.""" + + def apply(self, plan: LogicalPlan) -> LogicalPlan: # pyrefly: ignore[bad-override] + def transform(node: LogicalOperator) -> LogicalOperator: + if isinstance(node, ReadFiles) and node.scanner.pushed_predicate(): + return replace(node, scanner=replace(node.scanner, predicate=None)) + return node + + return LogicalPlan( + dag=plan.dag._apply_transform(transform), context=plan.context + ) + + +@pytest.fixture +def weakening_rule(): + ruleset = get_logical_ruleset() + ruleset.add(_WeakenScannerPredicate) + try: + yield + finally: + ruleset.remove(_WeakenScannerPredicate) + + +def test_optimizer_does_not_strand_a_predicate_a_later_rule_dropped( + tmp_path, weakening_rule +): + """A rule that drops the scanner's predicate must weaken listing too. + + The rule runs after the pushdown rules and knows nothing about + ``ListFiles``; the invariant has to hold anyway. + """ + from ray.data._internal.logical.operators import Filter + + read_files = _mk_read_files(tmp_path) + dag = Filter(predicate_expr=col("a") > 2, input_dependencies=[read_files]) + + optimized = LogicalOptimizer().optimize( + LogicalPlan(dag=dag, context=DataContext.get_current()) + ) + + read_files_ops: List[ReadFiles] = [ + op for op in optimized.dag.post_order_iter() if isinstance(op, ReadFiles) + ] + (scanner_predicate,) = [op.scanner.pushed_predicate() for op in read_files_ops] + assert scanner_predicate is None + assert _list_files_of(optimized).predicate is None + + +def test_optimizer_keeps_list_files_in_sync_with_the_scanner(tmp_path): + """Without the weakening rule, the pushed predicate does reach listing.""" + from ray.data._internal.logical.operators import Filter + + read_files = _mk_read_files(tmp_path) + dag = Filter(predicate_expr=col("a") > 2, input_dependencies=[read_files]) + + optimized = LogicalOptimizer().optimize( + LogicalPlan(dag=dag, context=DataContext.get_current()) + ) + + (scanner_predicate,) = [ + op.scanner.pushed_predicate() + for op in optimized.dag.post_order_iter() + if isinstance(op, ReadFiles) + ] + assert scanner_predicate is not None + assert _list_files_of(optimized).predicate is scanner_predicate + + +if __name__ == "__main__": + import sys + + sys.exit(pytest.main(["-v", __file__])) From e1062c7439d101e33df645f504fb9c31e499f025 Mon Sep 17 00:00:00 2001 From: Goutam Date: Fri, 31 Jul 2026 18:39:12 -0700 Subject: [PATCH 016/135] [Data] Restore inherited RAYTEST_FAIL_ON_* on tests that pin a runtime_env deep_update merges dicts but overwrites lists, so a test that declares its own cluster.byod.runtime_env replaces the DEFAULTS list rather than extending it. Pinning a bin budget therefore silently dropped RAY_DATA_DEBUG_RESOURCE_MANAGER and all three RAYTEST_FAIL_ON_* flags: 27 tests had stopped failing on worker OOM, dead nodes and spilling. It also split failure semantics across halves of the same test -- read_large_parquet_autoscaling kept the flags while its fixed_size twin lost them. Re-list the four inherited entries in every affected block, leaving the two that override them deliberately (heterogeneous_memory_batch_inference_ multitenancy and cross_az_...) alone. Verified by expanding both configs: the resolved failure flags and cluster_compute of all 199 tests now match master exactly. Also drop the redundant cluster_compute on iter_batches_pyarrow. It pinned the same value DEFAULTS supplies, so the baseline was never broken, but keeping it would stop the variant tracking its former matrix siblings if DEFAULTS moves. Document the list-replacement trap at the DEFAULTS block. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- release/release_data_tests.yaml | 61 +++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 6bb45d03bce8..b28e288f7d28 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -6,6 +6,13 @@ team: data cluster: + # WARNING: a test that declares its own ``byod.runtime_env`` REPLACES this + # list rather than extending it -- ``deep_update`` (release/ray_release/ + # util.py) merges dicts but overwrites lists. A test that sets one env var + # here silently loses every RAYTEST_FAIL_ON_* below, i.e. it stops failing + # on OOM / dead nodes / spilling. Re-list the four entries verbatim in any + # test that needs its own runtime_env, or deliberately override them (as + # ``heterogeneous_memory_batch_inference_multitenancy`` does). byod: runtime_env: # Enable verbose stats for resource manager (to troubleshoot autoscaling) @@ -65,6 +72,10 @@ anyscale_sdk_2026: true byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # 1 GiB packs ~14 row groups per bin, cutting the task count ~14x. - RAY_DATA_PARQUET_BIN_PACKING_BYTES=1073741824 cluster_compute: "fixed_size_cpu_compute.yaml" @@ -115,10 +126,6 @@ - RAYTEST_FAIL_ON_WORKER_OOM=1 - RAYTEST_FAIL_ON_DEAD_NODES=1 - RAYTEST_FAIL_ON_SPILLING=1 - # 64 MiB: pinned for parity with the other read tests. NOTE: inert here -- - # this dataset is JPEG, not Parquet, so the bin budget cannot apply. Both - # variants did move (+36.9pp / +5.6pp) but the cause is elsewhere. - - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 cluster_compute: "{{scaling}}_cpu_compute.yaml" matrix: @@ -193,6 +200,10 @@ anyscale_sdk_2026: true byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # sf1000 lineitem is read with its full 17-column schema: ~1.16 GiB # uncompressed per file over 1000 files. 1.25 GiB packs ~one file per # bin (~943 read tasks vs the ~1000 blocks master's round-robin @@ -673,6 +684,10 @@ anyscale_sdk_2026: true byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # imagenet parquet: 7416 single-row-group files of ~8.15 MiB, listed on # one task. ListFiles dominates this test, and its cost tracks the number # of results the driver pulls back rather than the footer IO itself: at @@ -721,6 +736,10 @@ anyscale_sdk_2026: true byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # No bin budget override: at the default this dataset (513 single-row- # group files of ~88 MB) already packs ~one file per bin, matching the # granularity master's round-robin partitioner produced. @@ -742,6 +761,10 @@ cluster: byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # 64 MiB pin. NOTE: likely inert -- this dataset is 513 # single-row-group files of ~88 MB, which pack one file per # bin at both 64 and 128 MiB, so the granularity the block @@ -759,12 +782,10 @@ cluster: byod: runtime_env: - # 64 MiB pin. NOTE: likely inert -- this dataset is 513 - # single-row-group files of ~88 MB, which pack one file per - # bin at both 64 and 128 MiB, so the granularity the block - # comment above describes is unchanged either way. Pinned - # because this variant moved (+17.0pp / +0.5pp) when the - # default changed; the cause is probably elsewhere. + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 - RAY_DATA_PARQUET_FOOTER_NUM_ACTORS=4 - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 run: @@ -799,6 +820,10 @@ byod: post_build_script: byod_install_mosaicml.sh runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # This benchmark hands in 200 explicit parquet paths, listed on a single # task. At the default footer batch size of 10 that is 20 batches, so # actors past the 20th are provisioned and never dispatched to. @@ -1008,7 +1033,9 @@ # 64 MiB: -2.2% vs master at 64 MiB, -0.0% at 128 MiB. numpy and pandas # both improved at 128 MiB, hence the split. - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 - cluster_compute: fixed_size_cpu_compute.yaml + # No cluster_compute: inherit DEFAULTS (fixed_size_cpu_compute.yaml), which + # is what this test ran on inside the matrix. Pinning the same value here + # would only make this variant stop tracking numpy/pandas if DEFAULTS moves. run: timeout: 2400 @@ -1126,6 +1153,10 @@ anyscale_sdk_2026: true byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # sf1000 lineitem, full 17-column schema: 1000 files x 49 row groups of # 24.36 MiB uncompressed = 1.16 GiB per file, and the distribution is # flat (p0 24.35 MiB, p100 24.78 MiB). 1 GiB packs 42 row groups per bin @@ -1643,6 +1674,10 @@ anyscale_sdk_2026: true byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # sf1000 lineitem: 1000 files x 49 row groups, 24.36 MiB uncompressed # per row group at the full 17-column schema. q1 projects 7 of those # columns and pre-filters on l_shipdate, so the packer sizes on a @@ -1996,6 +2031,10 @@ anyscale_sdk_2026: true byod: runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 # q20 projects 4 of lineitem's 17 columns -> ~160 MiB uncompressed per # file. At the default budget that splits each file ~4 ways (400 blocks # vs the 100 master's round-robin partitioner produced), and the extra From e3ae608b7df2dd04baeec04f76766ad602872420 Mon Sep 17 00:00:00 2001 From: Goutam Date: Fri, 31 Jul 2026 18:39:24 -0700 Subject: [PATCH 017/135] [Data] Cover filter + limit push-down over a nullable column Nothing exercised the two push-downs together, and nothing used nulls. The combination is where the fully_matched classification matters: listing stops early once the num_rows of fully-matched row groups reaches the pushed limit, so counting a non-surviving row would make Limit return fewer rows than asked for, with no error. Parquet min/max statistics are computed over non-null values only, which makes a group whose non-null values all satisfy the filter look fully matched by bounds alone. Arrow's row-group pruning turns out to be null-aware -- it declines to prune such a group by ~filter, so the classification is already correct -- but that was untested. Add one parameterized end-to-end test. The fixture is deliberately lopsided at 10 survivors per 100 rows: the early stop is evaluated per file, so a fixture with a small shortfall passes even when the classification is wrong, the last file's overshoot covering the deficit. With the misclassification injected, the 100- and 200-row limits fail. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../tests/test_footer_chunking.py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py b/python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py index 6d06f03def55..e8dcfeb5b067 100644 --- a/python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py +++ b/python/ray/data/_internal/datasource_v2/tests/test_footer_chunking.py @@ -243,6 +243,70 @@ def test_e2e_footer_pushdowns(footer_parquet, op, expected): assert op(ray.data.read_parquet(footer_parquet)) == expected +# Filter and limit push down together: the limit stops listing early once the +# ``num_rows`` of *fully matched* row groups reaches it, so that classification +# has to be exact. Nulls are the interesting case -- Parquet min/max statistics +# are computed over non-null values only, so a group whose non-null values all +# satisfy the filter looks fully matched by bounds alone while its null rows do +# not survive. Deliberately lopsided at 10 survivors per 100 rows: the stop is +# evaluated per file, so a fixture with a small shortfall can pass by luck when +# the last file's overshoot covers the deficit. +_NULL_FILES = 20 +_NULL_ROWS_PER_FILE = 100 +_NULL_TOTAL_SURVIVORS = _NULL_FILES * 10 + + +@pytest.fixture +def nullable_parquet(tmp_path, monkeypatch): + """Multi-file, multi-row-group data whose filtered column holds nulls.""" + import pyarrow as pa + import pyarrow.parquet as pq + + from ray.data.context import DataContext + + monkeypatch.setenv("RAY_DATA_PARQUET_FOOTER_NUM_ACTORS", "2") + monkeypatch.setenv("RAY_DATA_PARQUET_FOOTER_BATCH_SIZE", "2") + + ctx = DataContext.get_current() + prev_v2 = ctx.use_datasource_v2 + ctx.use_datasource_v2 = True + + for f in range(_NULL_FILES): + ids = [ + 3 + f * 1000 + i if i % 10 == 0 else None + for i in range(_NULL_ROWS_PER_FILE) + ] + pq.write_table( + pa.table({"id": pa.array(ids, pa.int64())}), + str(tmp_path / f"part_{f}.parquet"), + row_group_size=25, + ) + + try: + yield str(tmp_path) + finally: + ctx.use_datasource_v2 = prev_v2 + + +@pytest.mark.parametrize( + "limit", [1, 10, 100, _NULL_TOTAL_SURVIVORS, 10 * _NULL_TOTAL_SURVIVORS] +) +def test_e2e_filter_then_limit_with_nulls(nullable_parquet, limit): + """``filter(...).limit(n)`` delivers ``n`` rows whenever ``n`` survivors exist. + + If nulls were ever counted as survivors, listing would stop short and + ``Limit`` would return fewer rows than asked for, with no error. + """ + import ray + from ray.data.expressions import col + + ds = ray.data.read_parquet(nullable_parquet) + rows = ds.filter(expr=col("id") > 2).limit(limit).take_all() + + assert len(rows) == min(limit, _NULL_TOTAL_SURVIVORS) + assert all(r["id"] is not None and r["id"] > 2 for r in rows) + + if __name__ == "__main__": import sys From 5f43069637b89da9756f1c026e6b73e3d4f8cb94 Mon Sep 17 00:00:00 2001 From: Goutam Date: Fri, 31 Jul 2026 20:01:12 -0700 Subject: [PATCH 018/135] [Data] Type the scanner and listing accessors in the pushdown-derivation test pyrefly resolved `replace(read_files.input_dependencies[0], predicate=...)` against `LogicalOperator` and `read_files.scanner.push_filters(...)` against the base `Scanner`, neither of which carries those fields or methods. Route both through narrowing helpers, and take `Plan` in `_list_files_of` since that is what `Optimizer.optimize` returns. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../test_derive_list_files_pushdown.py | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py b/python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py index dc80810aa920..939bed4c3f0b 100644 --- a/python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py +++ b/python/ray/data/tests/unit/datasource_v2/test_derive_list_files_pushdown.py @@ -22,7 +22,15 @@ from ray.data._internal.datasource_v2.parquet_datasource_v2 import ( ParquetDatasourceV2, ) -from ray.data._internal.logical.interfaces import LogicalOperator, LogicalPlan, Rule +from ray.data._internal.datasource_v2.scanners.arrow_file_scanner import ( + ArrowFileScanner, +) +from ray.data._internal.logical.interfaces import ( + LogicalOperator, + LogicalPlan, + Plan, + Rule, +) from ray.data._internal.logical.operators import ListFiles, ReadFiles from ray.data._internal.logical.operators.map_operator import MapBatches from ray.data._internal.logical.optimizers import LogicalOptimizer, get_logical_ruleset @@ -64,17 +72,38 @@ def _apply(dag: LogicalOperator) -> LogicalPlan: return DeriveListFilesPushdown().apply(plan) -def _list_files_of(plan: LogicalPlan) -> ListFiles: +def _list_files_of(plan: Plan) -> ListFiles: (list_files,) = [ op for op in plan.dag.post_order_iter() if isinstance(op, ListFiles) ] return list_files +def _source_list_files(read_files: ReadFiles) -> ListFiles: + """The ``ListFiles`` feeding ``read_files``, typed as such. + + ``input_dependencies`` is declared as plain ``LogicalOperator``. + """ + (list_files,) = read_files.input_dependencies + assert isinstance(list_files, ListFiles), list_files + return list_files + + +def _scanner_of(read_files: ReadFiles) -> ArrowFileScanner: + """The scanner of ``read_files``, typed as the pushdown-capable subclass. + + ``ReadFiles.scanner`` is declared as the base ``Scanner``, which carries + none of the ``Supports*`` pushdown methods these tests drive. + """ + scanner = read_files.scanner + assert isinstance(scanner, ArrowFileScanner), scanner + return scanner + + def test_derives_state_the_scanner_accepted(tmp_path): read_files = _mk_read_files(tmp_path) predicate = col("a") > 2 - scanner, _residual = read_files.scanner.push_filters(predicate) + scanner, _residual = _scanner_of(read_files).push_filters(predicate) scanner = scanner.prune_columns(["a"]).push_limit(5) read_files = replace(read_files, scanner=scanner) @@ -113,7 +142,7 @@ def test_state_the_scanner_does_not_carry_is_cleared(tmp_path, stale): read_files = _mk_read_files(tmp_path) read_files = replace( read_files, - input_dependencies=[replace(read_files.input_dependencies[0], **stale)], + input_dependencies=[replace(_source_list_files(read_files), **stale)], ) list_files = _list_files_of(_apply(read_files)) @@ -127,7 +156,7 @@ def test_state_is_cleared_when_consumer_is_not_read_files(tmp_path): """``PushdownCountFiles`` rewrites ``ReadFiles`` out of the plan entirely.""" read_files = _mk_read_files(tmp_path) list_files = replace( - read_files.input_dependencies[0], predicate=col("a") > 2, limit=1 + _source_list_files(read_files), predicate=col("a") > 2, limit=1 ) count_rows = MapBatches( fn=lambda batch: batch, @@ -144,7 +173,7 @@ def test_state_is_cleared_when_consumer_is_not_read_files(tmp_path): def test_bare_list_files_root_is_cleared(tmp_path): read_files = _mk_read_files(tmp_path) - list_files = replace(read_files.input_dependencies[0], predicate=col("a") > 2) + list_files = replace(_source_list_files(read_files), predicate=col("a") > 2) assert _list_files_of(_apply(list_files)).predicate is None @@ -154,8 +183,10 @@ class _WeakenScannerPredicate(Rule): def apply(self, plan: LogicalPlan) -> LogicalPlan: # pyrefly: ignore[bad-override] def transform(node: LogicalOperator) -> LogicalOperator: - if isinstance(node, ReadFiles) and node.scanner.pushed_predicate(): - return replace(node, scanner=replace(node.scanner, predicate=None)) + if isinstance(node, ReadFiles): + scanner = _scanner_of(node) + if scanner.pushed_predicate() is not None: + return replace(node, scanner=replace(scanner, predicate=None)) return node return LogicalPlan( @@ -193,7 +224,7 @@ def test_optimizer_does_not_strand_a_predicate_a_later_rule_dropped( read_files_ops: List[ReadFiles] = [ op for op in optimized.dag.post_order_iter() if isinstance(op, ReadFiles) ] - (scanner_predicate,) = [op.scanner.pushed_predicate() for op in read_files_ops] + (scanner_predicate,) = [_scanner_of(op).pushed_predicate() for op in read_files_ops] assert scanner_predicate is None assert _list_files_of(optimized).predicate is None @@ -210,7 +241,7 @@ def test_optimizer_keeps_list_files_in_sync_with_the_scanner(tmp_path): ) (scanner_predicate,) = [ - op.scanner.pushed_predicate() + _scanner_of(op).pushed_predicate() for op in optimized.dag.post_order_iter() if isinstance(op, ReadFiles) ] From eb75903bf8bbd4484d15a8896354e7b5f7484029 Mon Sep 17 00:00:00 2001 From: Goutam Date: Sun, 2 Aug 2026 17:28:45 -0700 Subject: [PATCH 019/135] [Data] Pin per-scaling tuning for the tpch q1, q17, and q22 release tests A matrix cannot vary ``byod.runtime_env`` per setup value, so the variants that need their own tuning are spelled out. Rendered test names are unchanged. - q1 autoscaling: keep the 192 MiB bin budget of the fixed_size variants and scale up at 60% utilization instead of the 0.75 default. Both autoscaling variants land at 364-385s regardless of shuffle strategy while master runs hash_shuffle in 249s, which points at scale-up latency, not shuffle cost. - q17 autoscaling: 64 MiB. Smaller bins mean more read tasks, which give the autoscaler demand to act on earlier; the fixed_size variant is ~5x faster on the same query at the default budget. - q22 fixed_size/hash_shuffle: 16 MiB. At the 128 MiB default this sf100 scan collapses into a handful of bins and starves a 23-second query of read parallelism (+76.7% vs master in #102732, +72.0% in #102650). Each spelled-out entry re-lists the four inherited RAYTEST_FAIL_ON_* / RAY_DATA_DEBUG_RESOURCE_MANAGER vars, since a test-level runtime_env replaces the DEFAULTS list rather than extending it. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- release/release_data_tests.yaml | 113 +++++++++++++++++++++++++++++--- 1 file changed, 103 insertions(+), 10 deletions(-) diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index b28e288f7d28..5af670c3eba6 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -1663,11 +1663,14 @@ # TPCH Queries ############## -- name: "tpch_q1_{{scaling}}_{{shuffle_strategy}}" +# NOTE: the two scaling variants are spelled out rather than driven by a matrix +# because only the autoscaling one lowers the scale-up threshold, and a matrix +# cannot vary ``byod.runtime_env`` per setup value. The rendered test names are +# unchanged. Both variants keep the same 192 MiB bin budget. +- name: "tpch_q1_fixed_size_{{shuffle_strategy}}" python: "3.10" matrix: setup: - scaling: [fixed_size, autoscaling] shuffle_strategy: [hash_shuffle, hash_shuffle_v2] cluster: @@ -1685,7 +1688,40 @@ # full-schema readers of the same table (map_batches, write_parquet) # want. 192 MiB measured best here, matching q20 on the same table. - RAY_DATA_PARQUET_BIN_PACKING_BYTES=201326592 - cluster_compute: "{{scaling}}_all_to_all_compute.yaml" + cluster_compute: "fixed_size_all_to_all_compute.yaml" + + run: + timeout: 5400 + script: RAY_DATA_DEFAULT_SHUFFLE_STRATEGY={{shuffle_strategy}} python tpch/tpch_q1.py --sf 1000 + +- name: "tpch_q1_autoscaling_{{shuffle_strategy}}" + python: "3.10" + matrix: + setup: + shuffle_strategy: [hash_shuffle, hash_shuffle_v2] + + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # Same 192 MiB budget as the fixed_size variants; see the block above + # for how it was sized. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=201326592 + # Scale up at 60% logical utilization instead of the 0.75 default, as + # for map_batches. + # + # hash_shuffle read +53.9% vs master in #102732 and +55.5% in #102650 + # against the same master build. The gap is in the baseline, not the + # branch: both autoscaling variants land at 364-385s here, while master + # runs hash_shuffle in 249s and hash_shuffle_v2 in 367s. A branch floor + # that ignores the shuffle strategy points at scale-up latency rather + # than shuffle cost, which is what this threshold targets. + - RAY_DATA_CLUSTER_SCALING_UP_UTIL_THRESHOLD=0.6 + cluster_compute: "autoscaling_all_to_all_compute.yaml" run: timeout: 5400 @@ -1987,17 +2023,44 @@ timeout: 5400 script: RAY_DATA_DEFAULT_SHUFFLE_STRATEGY={{shuffle_strategy}} python tpch/tpch_q15.py --sf 100 -- name: "tpch_q17_{{scaling}}_{{shuffle_strategy}}" +# NOTE: the two scaling variants are spelled out rather than driven by a matrix +# because only the autoscaling one pins a bin budget, and a matrix cannot vary +# ``byod.runtime_env`` per setup value. The rendered test names are unchanged. +- name: "tpch_q17_fixed_size_{{shuffle_strategy}}" python: "3.10" frequency: manual matrix: setup: - scaling: [fixed_size, autoscaling] shuffle_strategy: [hash_shuffle, hash_shuffle_v2] cluster: anyscale_sdk_2026: true - cluster_compute: "{{scaling}}_all_to_all_compute.yaml" + cluster_compute: "fixed_size_all_to_all_compute.yaml" + + run: + timeout: 5400 + script: RAY_DATA_DEFAULT_SHUFFLE_STRATEGY={{shuffle_strategy}} python tpch/tpch_q17.py --sf 100 + +- name: "tpch_q17_autoscaling_{{shuffle_strategy}}" + python: "3.10" + frequency: manual + matrix: + setup: + shuffle_strategy: [hash_shuffle, hash_shuffle_v2] + + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB: smaller bins mean more read tasks, which give the autoscaler + # demand to act on earlier. The fixed_size variant runs ~5x faster on + # the same query at the default budget, so this is scaling-specific. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 + cluster_compute: "autoscaling_all_to_all_compute.yaml" run: timeout: 5400 @@ -2083,6 +2146,40 @@ timeout: 5400 script: RAY_DATA_DEFAULT_SHUFFLE_STRATEGY={{shuffle_strategy}} python tpch/tpch_q21.py --sf 100 +# NOTE: fixed_size/hash_shuffle is spelled out separately because it is the one +# variant that pins a bin budget, and a matrix cannot vary ``byod.runtime_env`` +# per setup value. The other three keep tracking the default. The rendered test +# names are unchanged. +- name: tpch_q22_fixed_size_hash_shuffle + python: "3.10" + frequency: nightly + + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 16 MiB, an eighth of the 128 MiB default. This was the worst + # regression in release build #102732 at +76.7% vs master (23.5s vs + # 13.3s), and it reproduced at +72.0% in #102650 against the same + # master build with only +2.7% drift between the two, so the size of + # the gap is measured rather than inferred from one run. + # + # q22 is sf100 customer/orders, far smaller than the sf1000 lineitem + # tables that want 192 MiB (q1, q20) or 1 GiB (map_batches). At the + # 128 MiB default the whole scan collapses into a handful of bins, + # which starves a 23-second query of read parallelism; 16 MiB trades + # per-task overhead for enough tasks to fill the cluster. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=16777216 + cluster_compute: "fixed_size_all_to_all_compute.yaml" + + run: + timeout: 5400 + script: RAY_DATA_DEFAULT_SHUFFLE_STRATEGY=hash_shuffle python tpch/tpch_q22.py --sf 100 + - name: "tpch_q22_{{scaling}}_{{shuffle_strategy}}" python: "3.10" frequency: "{{frequency}}" @@ -2092,10 +2189,6 @@ frequency: [] shuffle_strategy: [] adjustments: - - with: - scaling: fixed_size - frequency: nightly - shuffle_strategy: hash_shuffle - with: scaling: fixed_size frequency: nightly From 42244f53555649e4c14e34204dc464cc4a4537f5 Mon Sep 17 00:00:00 2001 From: Goutam Date: Sun, 2 Aug 2026 17:29:51 -0700 Subject: [PATCH 020/135] [Train] Give test_e2e_wandb_integration a medium timeout The target ran two full ``TorchTrainer.fit()`` runs (2 workers, 3 epochs) plus a ``ray.init`` per parameterization inside small's 60s budget, and timed out at 60.3s on both attempts in CI. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- python/ray/train/BUILD.bazel | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/ray/train/BUILD.bazel b/python/ray/train/BUILD.bazel index 3d71751d4233..5bd0faa8ec02 100644 --- a/python/ray/train/BUILD.bazel +++ b/python/ray/train/BUILD.bazel @@ -919,7 +919,9 @@ py_test( py_test( name = "test_e2e_wandb_integration", - size = "small", + # Two full ``TorchTrainer.fit()`` runs (2 workers, 3 epochs) plus a + # ``ray.init`` per parameterization do not fit in small's 60s budget. + size = "medium", srcs = ["tests/test_e2e_wandb_integration.py"], env = {"RAY_TRAIN_V2_ENABLED": "0"}, tags = [ From ad1669502a405dba749ab1d3230c54c3c45adc5f Mon Sep 17 00:00:00 2001 From: Goutam Date: Mon, 3 Aug 2026 00:17:53 -0700 Subject: [PATCH 021/135] [Data] Retry transient IO errors when slicing Parquet fragments ``ParquetFileFragment.subset`` and ``.metadata`` open the file to read its footer, so on remote storage they fail with the same transient errors the rest of the read path already retries -- an sf1000 lineitem read died on "AWS Error NETWORK_CONNECTION ... curlCode: 28" inside ``subset``. Route both through ``call_with_retry`` with the context's ``retried_io_errors``. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- .../chunkers/parquet_file_chunking_utils.py | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py b/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py index a5cc2b06972e..4d84c864c087 100644 --- a/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py +++ b/python/ray/data/_internal/datasource_v2/chunkers/parquet_file_chunking_utils.py @@ -3,10 +3,30 @@ Maps ``ParquetRowGroupChunkMetadata`` (the explicit surviving row groups a bin assigns to a file) to PyArrow ``ParquetFileFragment`` subsets for reading. """ -from typing import Iterable, List, Tuple +from typing import Callable, Iterable, List, Tuple, TypeVar import pyarrow.dataset as pds +from ray._common.retry import call_with_retry + +R = TypeVar("R") + + +def _with_io_retry(f: Callable[[], R], description: str) -> R: + """Run ``f``, retrying the transient IO errors configured on the context. + + ``ParquetFileFragment.subset`` and ``.metadata`` both open the file to read + its footer, so on remote storage they fail with the same transient errors + (S3 timeouts, throttling) the rest of the read path already retries. + """ + from ray.data.context import DataContext + + return call_with_retry( + f, + description=description, + match=DataContext.get_current().retried_io_errors, + ) + def _fragments_from_row_group_ids( fragment: pds.ParquetFileFragment, @@ -31,12 +51,21 @@ def _fragments_from_row_group_ids( ids = sorted(row_group_ids) if not ids: return [] + + def _subset(rg_ids: List[int]) -> pds.ParquetFileFragment: + return _with_io_retry( + lambda: fragment.subset(row_group_ids=rg_ids), + f"subset row groups {rg_ids} of {fragment.path}", + ) + if not per_row_group_offsets: - return [(fragment.subset(row_group_ids=ids), 0)] + return [(_subset(ids), 0)] - metadata = fragment.metadata + metadata = _with_io_retry( + lambda: fragment.metadata, f"read Parquet footer for {fragment.path}" + ) # Cumulative pre-filter row offset at the start of each physical row group. prefix = [0] * (metadata.num_row_groups + 1) for i in range(metadata.num_row_groups): prefix[i + 1] = prefix[i] + metadata.row_group(i).num_rows - return [(fragment.subset(row_group_ids=[rg_id]), prefix[rg_id]) for rg_id in ids] + return [(_subset([rg_id]), prefix[rg_id]) for rg_id in ids] From af4b755380323c1ae768c6a988d9b53ac35d214e Mon Sep 17 00:00:00 2001 From: Goutam Date: Mon, 3 Aug 2026 00:29:14 -0700 Subject: [PATCH 022/135] [Data] Pin a 64 MiB bin budget for tpch_q18 autoscaling tpch_q18_autoscaling_hash_shuffle_v2 has failed two builds running: in #102732 the workload completed in 2075.9s and was then failed by RAYTEST_FAIL_ON_SPILLING on 4.62 GiB spilled against a 17.75 GiB object-store peak (61.6% utilization) -- spill under moderate pressure rather than a cluster out of memory, which is the shape a smaller bin budget is most likely to help. Smaller bins also give the autoscaler demand to act on earlier, as for q17. tpch_q21_autoscaling_hash_shuffle_v2 fails the same way and is left at the default as a control. The matrix cannot vary ``byod.runtime_env`` per setup value, so the two scaling variants are spelled out; rendered test names are unchanged, and the autoscaling entry re-lists the four inherited RAYTEST_FAIL_ON_* / RAY_DATA_DEBUG_RESOURCE_MANAGER vars. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Goutam --- release/release_data_tests.yaml | 43 ++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index 5af670c3eba6..c4df5802865c 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -2066,17 +2066,54 @@ timeout: 5400 script: RAY_DATA_DEFAULT_SHUFFLE_STRATEGY={{shuffle_strategy}} python tpch/tpch_q17.py --sf 100 -- name: "tpch_q18_{{scaling}}_{{shuffle_strategy}}" +# NOTE: the two scaling variants are spelled out rather than driven by a matrix +# because only the autoscaling one pins a bin budget, and a matrix cannot vary +# ``byod.runtime_env`` per setup value. The rendered test names are unchanged. +- name: "tpch_q18_fixed_size_{{shuffle_strategy}}" python: "3.10" frequency: manual matrix: setup: - scaling: [fixed_size, autoscaling] shuffle_strategy: [hash_shuffle, hash_shuffle_v2] cluster: anyscale_sdk_2026: true - cluster_compute: "{{scaling}}_all_to_all_compute.yaml" + cluster_compute: "fixed_size_all_to_all_compute.yaml" + + run: + timeout: 5400 + script: RAY_DATA_DEFAULT_SHUFFLE_STRATEGY={{shuffle_strategy}} python tpch/tpch_q18.py --sf 100 + +- name: "tpch_q18_autoscaling_{{shuffle_strategy}}" + python: "3.10" + frequency: manual + matrix: + setup: + shuffle_strategy: [hash_shuffle, hash_shuffle_v2] + + cluster: + anyscale_sdk_2026: true + byod: + runtime_env: + - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 + - RAYTEST_FAIL_ON_WORKER_OOM=1 + - RAYTEST_FAIL_ON_DEAD_NODES=1 + - RAYTEST_FAIL_ON_SPILLING=1 + # 64 MiB, half the default, matching the q17 autoscaling pin. Smaller + # bins mean more and smaller read tasks, which both give the autoscaler + # demand to act on earlier and cut the peak block size feeding the + # shuffle. + # + # hash_shuffle_v2 has failed two builds running -- in #102732 the + # workload completed in 2075.9s and was then failed by + # RAYTEST_FAIL_ON_SPILLING on 4.62 GiB spilled against a 17.75 GiB + # object-store peak (61.6% utilization). That is spill under moderate + # pressure, not a cluster out of memory, which is the shape a smaller + # bin budget is most likely to help. Its sibling + # tpch_q21_autoscaling_hash_shuffle_v2 fails the same way and is left + # at the default for now as a control. + - RAY_DATA_PARQUET_BIN_PACKING_BYTES=67108864 + cluster_compute: "autoscaling_all_to_all_compute.yaml" run: timeout: 5400 From 717c457d9c249326e7fd7f08fa8bf8a8308d7552 Mon Sep 17 00:00:00 2001 From: Goutam Date: Tue, 4 Aug 2026 11:30:02 -0700 Subject: [PATCH 023/135] Fix limit pushdown Signed-off-by: Goutam --- .../_internal/logical/rules/limit_pushdown.py | 20 ++++------ ...test_execution_optimizer_limit_pushdown.py | 37 +++++++++++++++++-- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/python/ray/data/_internal/logical/rules/limit_pushdown.py b/python/ray/data/_internal/logical/rules/limit_pushdown.py index 8e3bfe3da6aa..7f6780599b95 100644 --- a/python/ray/data/_internal/logical/rules/limit_pushdown.py +++ b/python/ray/data/_internal/logical/rules/limit_pushdown.py @@ -196,19 +196,15 @@ def _push_limit_down(self, limit_op: Limit) -> LogicalOperator: num_rows_preserving_ops.append(current_op) current_op = current_op.input_dependencies[0] - # If we couldn't push through any operators, the Limit sits directly on - # its input. For a V2 ``ReadFiles`` source we still push a per-block limit - # into it (and mirror the limit onto the upstream ``ListFiles`` so a - # footer-based indexer can stop listing early), keeping the ``Limit`` on - # top for exact enforcement. Other ops are left untouched. - if not num_rows_preserving_ops: - if isinstance(current_op, ReadFiles): - limit_input = self._apply_per_block_limit_if_supported( - current_op, limit_op.limit - ) - if limit_input is not current_op: - return Limit(limit_op.limit, input_dependencies=[limit_input]) + # If we couldn't push through any operators, the Limit sits directly on its + # input, and only a V2 ``ReadFiles`` source is worth rewriting: pushing the + # per-block limit into its scanner also reaches the upstream ``ListFiles`` + # (via ``DeriveListFilesPushdown``) so a footer-based indexer can stop + # listing early. The ``Limit`` stays on top for exact enforcement either + # way. Other ops are left untouched. + if not num_rows_preserving_ops and not isinstance(current_op, ReadFiles): return limit_op + # Apply per-block limit to the deepest operator if it supports it limit_input = self._apply_per_block_limit_if_supported( current_op, limit_op.limit diff --git a/python/ray/data/tests/test_execution_optimizer_limit_pushdown.py b/python/ray/data/tests/test_execution_optimizer_limit_pushdown.py index 603580089a86..6514ca0880f6 100644 --- a/python/ray/data/tests/test_execution_optimizer_limit_pushdown.py +++ b/python/ray/data/tests/test_execution_optimizer_limit_pushdown.py @@ -7,7 +7,7 @@ import ray from ray.data import Dataset from ray.data._internal.logical.interfaces import LogicalOperator, Plan -from ray.data._internal.logical.operators import Download, Limit +from ray.data._internal.logical.operators import Download, Limit, ListFiles, ReadFiles from ray.data._internal.logical.rules.limit_pushdown import LimitPushdownRule from ray.data._internal.util import rows_same from ray.data.block import BlockMetadata @@ -249,8 +249,8 @@ def test_limit_pushdown_correctness(ray_start_regular_shared_2_cpus): # Test 6: Complex chain with both safe operations (should all get limit pushed) ds = ( ray.data.range(100) - .select_columns(["id"]) # Project - could be safe if it was the immediate input - .map(lambda x: {"id": x["id"] + 1}) # MapRows - NOT safe, stops pushdown + .select_columns(["id"]) # Project - row-preserving, limit pushes through + .map(lambda x: {"id": x["id"] + 1}) # MapRows - row-preserving, pushes through .limit(3) ) result = ds.take_all() @@ -265,6 +265,37 @@ def test_limit_pushdown_correctness(ray_start_regular_shared_2_cpus): ) +def test_limit_pushdown_into_read_files_scanner( + tmp_path, ray_start_regular_shared_2_cpus, restore_data_context +): + """A Limit sitting directly on a V2 ``ReadFiles`` still pushes a limit in. + + The pushed limit reaches the scanner and, through + ``DeriveListFilesPushdown``, the upstream ``ListFiles``, which is what lets + a footer-based indexer stop listing early. None of that shows up in + ``dag_str``, so assert on the operators themselves. + """ + ray.data.DataContext.get_current().use_datasource_v2 = True + + for i in range(3): + pd.DataFrame({"id": range(i * 10, i * 10 + 10)}).to_parquet( + tmp_path / f"part{i}.parquet" + ) + + ds = ray.data.read_parquet(str(tmp_path)).limit(5) + assert len(ds.take_all()) == 5 + + # The Limit stays on top for exact enforcement. + limit_op = ds._logical_plan.dag + assert isinstance(limit_op, Limit), limit_op.dag_str + (read_files,) = limit_op.input_dependencies + assert isinstance(read_files, ReadFiles), read_files + assert read_files.scanner.pushed_limit() == 5 + (list_files,) = read_files.input_dependencies + assert isinstance(list_files, ListFiles), list_files + assert list_files.limit == 5 + + def test_limit_pushdown_scan_efficiency(ray_start_regular_shared_2_cpus): """Test that limit pushdown scans fewer rows from the data source.""" From fd38ffd565509ba45701f7392a03a8b6e099a215 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Wed, 29 Jul 2026 16:12:22 -0700 Subject: [PATCH 024/135] [Data] Add flag-gated arrow-rs Parquet reader for DataSource V2 Introduce an optional native (Rust/PyO3) Parquet reader for the DataSource V2 read path, gated by a new DataContext flag `use_arrow_rs_parquet_reader` (default False, active only under `use_datasource_v2`). When enabled, `ParquetScanner.create_reader()` returns `ArrowRsParquetFileReader`, which footer-reads each file via the `ray_data_arrow_rs` crate and decodes supported row groups natively, falling back to the PyArrow reader for unsupported files/types/ filesystems. This targets scheduler-invisible Parquet decode memory (ray#49158): the native path bounds the decode working set instead of materializing whole decoded row groups. Changes: - New Rust crate `ray_data_arrow_rs` (maturin/PyO3, out of the Bazel build) exposing native row-group reads over an Arrow C-stream. - New `ArrowRsParquetFileReader` + `native_metadata` helpers. - Base `FileReader` refactor (behavior-preserving): extract `_split_columns`/`_postprocess`/`_dispatch_fragment_reads` for reuse. - `DataContext.use_arrow_rs_parquet_reader` flag + scanner toggle. - Full parity/fallback test suite. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/.gitignore | 4 + .../native/ray_data_arrow_rs/Cargo.lock | 2636 ++++++++++++++++ .../native/ray_data_arrow_rs/Cargo.toml | 56 + .../native/ray_data_arrow_rs/README.md | 54 + .../native/ray_data_arrow_rs/pyproject.toml | 15 + .../native/ray_data_arrow_rs/src/lib.rs | 1199 ++++++++ .../native/ray_data_arrow_rs/src/predicate.rs | 602 ++++ .../datasource_v2/native_metadata.py | 100 + .../readers/arrow_rs_parquet_file_reader.py | 1470 +++++++++ .../datasource_v2/readers/file_reader.py | 76 +- .../datasource_v2/scanners/parquet_scanner.py | 26 +- python/ray/data/context.py | 15 + .../test_arrow_rs_parquet_reader.py | 2658 +++++++++++++++++ 13 files changed, 8892 insertions(+), 19 deletions(-) create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/README.md create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/pyproject.toml create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs create mode 100644 python/ray/data/_internal/datasource_v2/native_metadata.py create mode 100644 python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py create mode 100644 python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore new file mode 100644 index 000000000000..bc3f649a1e1c --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore @@ -0,0 +1,4 @@ +/target +# Cargo.lock IS committed: this crate builds a wheel for reproducible CI, and +# ci/docker/dataarrowrs.build.wanda.yaml lists Cargo.lock in its build srcs. + diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock new file mode 100644 index 000000000000..633ca51182fe --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock @@ -0,0 +1,2636 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "const-random", + "getrandom 0.3.4", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "arrow" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b952ca5a8046ad741b60f142d6eca4aeebcad615694202bc64c5341f23e32c5b" +dependencies = [ + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-csv", + "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", +] + +[[package]] +name = "arrow-arith" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a13b8d3008c4e9063c597a08f46446fe3fd5789277127672d6c0bdbb43b1ff" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "num-traits", +] + +[[package]] +name = "arrow-array" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9486151b2f0785bafc6fa04fc5c99fcb4495455662e58787ea32eaaed33c4192" +dependencies = [ + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown", + "num-complex", + "num-integer", + "num-traits", +] + +[[package]] +name = "arrow-buffer" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4776577a87794bfdf0b4e90e2ea12454fa7738ea2823c4be5b9d1851da7b434" +dependencies = [ + "bytes", + "half", + "num-bigint", + "num-traits", +] + +[[package]] +name = "arrow-cast" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9ad451ce4f98710828a455b96991b8f031deb2e67f5fcad6773f017e4a69c3a" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-ord", + "arrow-schema", + "arrow-select", + "atoi", + "base64", + "chrono", + "half", + "lexical-core", + "num-traits", + "ryu", +] + +[[package]] +name = "arrow-csv" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aa7bf96d6141a7bcca2eed57c7c9767d2a2175281857b8a7b68308992864784" +dependencies = [ + "arrow-array", + "arrow-cast", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b38fe43e2e8704360f1464e6e8cc4fc381ef02cc4fb0192afa8df1aaa0115c66" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num-integer", + "num-traits", +] + +[[package]] +name = "arrow-ipc" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29dac499fcbc6ba74ee0324057821d381929a48526a3966bd9dffb44aa06d98c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe05e916ddc50f4c7a363cd69c0ef5894fcee063517e9a0b8582f0c56746af6" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-ord", + "arrow-schema", + "arrow-select", + "chrono", + "half", + "indexmap", + "itoa", + "lexical-core", + "memchr", + "num-traits", + "ryu", + "serde_core", + "serde_json", + "simdutf8", +] + +[[package]] +name = "arrow-ord" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13dbdc2a9c053c10c7baa6e30faee04a180aa7ce88e471835850ce37abd20b" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", +] + +[[package]] +name = "arrow-row" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d5a1f8c733d15260b305683472ee8ad89c62cbd706703ca873b90d051b41592" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9e4969dc350d571766247143ab36a5187d095d3d3690970408bc630d47c69e5" +dependencies = [ + "bitflags", +] + +[[package]] +name = "arrow-select" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402770dba90865359d98d1ef92ef16e23d75c0cca9c2c880c8a05468b7743bf9" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num-traits", +] + +[[package]] +name = "arrow-string" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b0afbb8b9016700938291123df30838b89decc3213dba00852021988b170d3" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num-traits", + "regex", + "regex-syntax", +] + +[[package]] +name = "async-trait" +version = "0.1.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "cc" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chacha20" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +dependencies = [ + "cfg-if", + "cpufeatures", + "rand_core", +] + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "either" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3" +dependencies = [ + "bitflags", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "miniz_oxide", + "zlib-rs", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" + +[[package]] +name = "futures-executor" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" + +[[package]] +name = "futures-macro" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "futures-sink" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" + +[[package]] +name = "futures-task" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" + +[[package]] +name = "futures-util" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi 6.0.0", + "rand_core", + "wasm-bindgen", +] + +[[package]] +name = "h2" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", + "zerocopy", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "humantime" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15" + +[[package]] +name = "hyper" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lexical-core" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" +dependencies = [ + "lexical-parse-integer", + "lexical-util", +] + +[[package]] +name = "lexical-parse-integer" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" +dependencies = [ + "lexical-util", +] + +[[package]] +name = "lexical-util" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" + +[[package]] +name = "lexical-write-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" +dependencies = [ + "lexical-util", + "lexical-write-integer", +] + +[[package]] +name = "lexical-write-integer" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" +dependencies = [ + "lexical-util", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "lz4_flex" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "object_store" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622acbc9100d3c10e2ee15804b0caa40e55c933d5aa53814cd520805b7958a49" +dependencies = [ + "async-trait", + "base64", + "bytes", + "chrono", + "form_urlencoded", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body-util", + "humantime", + "hyper", + "itertools", + "md-5", + "parking_lot", + "percent-encoding", + "quick-xml", + "rand", + "reqwest", + "ring", + "serde", + "serde_json", + "serde_urlencoded", + "thiserror", + "tokio", + "tracing", + "url", + "walkdir", + "wasm-bindgen-futures", + "web-time", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "parquet" +version = "59.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5302d4da74d6596a1f11f9928767995b53bca657cbeea1e4e8c5074f8a1157dd" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64", + "brotli", + "bytes", + "chrono", + "crc32fast", + "flate2", + "futures", + "half", + "hashbrown", + "lz4_flex", + "num-bigint", + "num-integer", + "num-traits", + "object_store", + "paste", + "seq-macro", + "simdutf8", + "snap", + "tokio", + "twox-hash", + "zstd", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "portable-atomic" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "once_cell", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "quick-xml" +version = "0.39.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quinn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand", + "rand_pcg", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.61.2", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core", +] + +[[package]] +name = "ray_data_arrow_rs" +version = "0.1.0" +dependencies = [ + "arrow", + "futures", + "object_store", + "parquet", + "pyo3", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustls" +version = "0.23.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "seq-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "snap" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "199905e6153d6405f9728fe44daace35f8f837bbf830bb6e85fbd5828709a886" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "thiserror" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8464ec13c3691491391d9fce00f6416c9a48e46972f72d7865688be2080192c9" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unindent" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zlib-rs" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml new file mode 100644 index 000000000000..e26a5dc67e0e --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml @@ -0,0 +1,56 @@ +[package] +name = "ray_data_arrow_rs" +version = "0.1.0" +edition = "2021" +description = "Experimental arrow-rs Parquet reader for Ray Data (prototype)" + +[lib] +name = "ray_data_arrow_rs" +# cdylib for the Python extension module; rlib so the logic can be unit-tested +# from Rust too. +crate-type = ["cdylib", "rlib"] + +[dependencies] +# Pin to the same major the surviving standalone benchmark used, so behavior +# matches the numbers in Agents.md. object_store MUST match the version parquet +# pins (0.13.x) or ParquetObjectReader's API won't line up. +# `crc`: verify each data page's stored CRC32 during decode (decode_page in +# parquet's serialized_reader, used by BOTH the sync/local and async/S3 paths). +# Compile-time only — there is no runtime toggle — and a no-op for pages that +# don't store a CRC (pyarrow doesn't write them by default). Enables native +# support for `page_checksum_verification=True`; an explicit `False` (read +# *despite* bad checksums) still falls back to PyArrow, the only reader that +# can skip the check. +parquet = { version = "59", features = ["arrow", "async", "object_store", "crc"] } +# Only the `ffi` feature — we hand batches to Python via the Arrow C-stream +# (FFI_ArrowArrayStream + PyCapsule), NOT arrow's `pyarrow` conversions. Pulling +# `pyarrow` would drag in arrow-pyarrow → pyo3 0.28, conflicting with our pyo3 0.22. +arrow = { version = "59", features = ["ffi"] } +object_store = { version = "0.13", features = ["aws"] } +# `extension-module` is behind a default feature so `cargo test` can run the +# pure-Rust unit tests (predicate pruning) by linking libpython: +# cargo test --no-default-features +# maturin builds with default features on, so the shipped extension is unchanged. +pyo3 = { version = "0.22", features = ["abi3-py39"] } +tokio = { version = "1", features = ["rt-multi-thread", "macros"] } +futures = "0.3" +# Predicate IR is passed from Python as a small JSON string (built from the Ray +# `Expr` AST) and parsed here into a `Pred` tree for row-group stats pruning. +# JSON keeps the boundary language-agnostic and lets the pruning logic be +# unit-tested in pure Rust with string literals (no parquet fixtures needed). +serde = { version = "1", features = ["derive"] } +serde_json = "1" + +# No optional allocator features: an allocator-retention theory was tested and +# disproven (Agents.md §3.5.1/§7.8) — the system allocator is correct here, and +# mimalloc-as-global-allocator segfaulted Ray workers across the FFI boundary. +# Allocator A/B experiments use LD_PRELOAD, which needs no crate support. + +[features] +default = ["extension-module"] +extension-module = ["pyo3/extension-module"] + +[profile.release] +opt-level = 3 +lto = true +codegen-units = 1 diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/README.md b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/README.md new file mode 100644 index 000000000000..9aee8fe913db --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/README.md @@ -0,0 +1,54 @@ +# `ray_data_arrow_rs` — experimental arrow-rs Parquet reader + +Native PyO3 extension backing `ArrowRsParquetFileReader` +(`_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py`). Selected at +runtime by `DataContext.use_arrow_rs_parquet_reader` (only under +`use_datasource_v2=True`). + +## Status + +This source is a **reconstruction** from the surviving standalone benchmark +(`main.rs`). A prebuilt macOS/cpython-3.12 `.so` (v0.1.0) is already installed in +the dev venv and is the behavioral source of truth for local (macOS) work — the +integration and benchmark run against it today. This crate exists so the reader +can be: + +1. **rebuilt for Linux/x86-64** (the "deciding experiment" in `Agents.md` §7 must + run on Ray's Linux runtime with USS metrics + real S3), and +2. **evolved** to expose the tuning knobs the standalone benchmark had but the + v0.1.0 API doesn't (K intra-row-group split, fetch window, byte budget). + +It has **not** been compiled in-session. Before relying on it, build and validate: + +```bash +cd python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs +maturin develop --release # installs ray_data_arrow_rs into the venv +pytest ../../../../tests/datasource/test_arrow_rs_parquet_reader.py -v +``` + +If the parity tests pass, the reconstruction matches PyArrow. Then run the +benchmark (`release/nightly_tests/dataset/arrow_rs_read_benchmark.py`). + +## API + +``` +read_row_groups(path, row_groups=None, columns=None, batch_size=131072) +read_row_groups_s3(bucket, key, region, anonymous, + row_groups=None, columns=None, batch_size=131072) +``` + +Both return an object implementing `__arrow_c_stream__`, consumed on the Python +side with `pa.RecordBatchReader.from_stream(...)`. + +## Open items for the S3/Linux phase + +- **Expose the knobs** (`decode_budget_bytes`, `k`, `fetch_window_mb`) and port + `build_units` / `read_unit_windowed` / `read_all_async` from `main.rs` so a + single big row group splits into K parallel range reads — the mechanism + `Agents.md` credits for the 4–5× S3 speedup. The current `read_row_groups` + does a single streaming pass (memory win only, no intra-fragment K). +- **Un-gate S3** in `_arrow_rs_supported` once `read_row_groups_s3` is validated. +- **Reconcile FFI/dep versions** on first build (arrow/parquet 59, object_store + 0.13, pyo3 0.22 — adjust to whatever resolves). +- **Avoid double parallelism**: with intra-fragment K in the crate, set + `RAY_DATA_READ_FILES_NUM_THREADS=1` for the arrow-rs path (see the reader). diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/pyproject.toml b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/pyproject.toml new file mode 100644 index 000000000000..3afcb043472d --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/pyproject.toml @@ -0,0 +1,15 @@ +[build-system] +requires = ["maturin>=1.5,<2.0"] +build-backend = "maturin" + +[project] +name = "ray_data_arrow_rs" +version = "0.1.0" +description = "Experimental arrow-rs Parquet reader for Ray Data (prototype)" +requires-python = ">=3.9" +classifiers = ["Programming Language :: Rust"] + +[tool.maturin] +# Build a plain extension module (no separate Python package dir). +module-name = "ray_data_arrow_rs.ray_data_arrow_rs" +features = ["pyo3/extension-module"] diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs new file mode 100644 index 000000000000..885e6ca88b19 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -0,0 +1,1199 @@ +//! Experimental arrow-rs Parquet reader for Ray Data (PyO3 extension). +//! +//! RECONSTRUCTION STATUS +//! --------------------- +//! Reconstructed from the surviving standalone benchmark (`main.rs`). The local +//! path (`read_row_groups`) ports two of `main.rs`'s modes: +//! +//! 1. **Byte-budgeted per-group streaming** (`row_group_loop_bb`, threads==1): +//! read one row group at a time with a batch size computed *by bytes* from the +//! footer (`byte_budget_rows`), so the decoded working set stays flat across +//! schemas (wide-string groups get few rows/batch, numeric groups many). A +//! single reader streams each group in file order and drops each batch, so peak +//! memory ~= one budget while row order is preserved. +//! +//! 2. **Intra-fragment K-split** (`build_units` / `read_range_fixed`): when a call +//! covers a *single* row group larger than `split_threshold_bytes`, split its +//! rows into K contiguous ranges decoded by K threads and merge them back in +//! range order (`ParallelRangeReader`). This is the case Ray can't parallelize +//! (a big row group is a lone fragment → thread pool of 1), so PyArrow decodes +//! it ~single-threaded; K gives us parallel decode without regressing speed. +//! Multi-row-group / small-row-group calls use path 1 (K=1) because Ray's +//! fragment thread pool already parallelizes those — so the two parallelism +//! layers never multiply. +//! +//! Unlike `main.rs` (which only sums a commutative checksum, so range order is +//! irrelevant), we return real data, so the K-split merge is strictly order +//! preserving: one bounded channel per range, drained in range order. +//! +//! The S3 path (`read_row_groups_s3`) ports `main.rs`'s windowed-async reader +//! (`read_all_async` / `read_unit_windowed`) but tuned **memory-first**: peak RSS +//! is `≈ (fetch window compressed) + (decode budget)`, both knobs, flat regardless +//! of row-group size — not `main.rs`'s always-K-way fan-out (which multiplies +//! in-flight memory by K for speed). We fan out to K concurrent GET streams ONLY +//! for a lone row group above `split_threshold_bytes` (the case Ray's fragment +//! pool can't parallelize) — exactly mirroring the local K-split rule — so crate-K +//! and Ray's 4-thread pool never multiply. Every other layout is a single windowed +//! stream (K=1). Output is order-preserving (per-unit channels drained in order), +//! and the decode batch is byte-budgeted just like the local path. +//! +//! Within a single stream, consecutive fetch windows are pipelined by +//! `prefetch_windows` (default 2): window N+1's GET is issued while window N +//! decodes, hiding S3 first-byte latency behind decode without staging the whole +//! row group. depth=1 restores the strictly-serial windows. This is orthogonal to +//! K: K adds parallel streams (spatial split), prefetch overlaps fetch/decode +//! within one stream. Both stay memory-bounded knobs +//! (`≈ k * prefetch_windows * fetch_window` compressed in flight). +//! +//! Public API (consumed by `ArrowRsParquetFileReader` on the Python side via +//! `pa.RecordBatchReader.from_stream(...)`): +//! +//! read_row_groups(path, row_groups=None, columns=None, batch_size=131072, +//! decode_budget_bytes=2*1024*1024, k=1, +//! split_threshold_bytes=128*1024*1024) +//! read_row_groups_s3(bucket, key, region, anonymous, endpoint=None, ...creds..., +//! row_groups=None, columns=None, batch_size=131072, +//! decode_budget_bytes=2*1024*1024, fetch_window_mb=16, k=1, +//! split_threshold_bytes=128*1024*1024, prefetch_windows=2) + +mod predicate; + +use std::collections::{HashMap, HashSet, VecDeque}; +use std::fs::File; +use std::sync::mpsc::{sync_channel, Receiver}; +use std::thread; + +use crate::predicate::{can_match, ColStats, Pred, Value}; +use parquet::basic::Type as PhysicalType; +use parquet::file::metadata::RowGroupMetaData; +use parquet::file::statistics::Statistics; + +use arrow::array::RecordBatch; +use arrow::datatypes::SchemaRef; +use arrow::error::ArrowError; +use arrow::ffi::FFI_ArrowSchema; +use arrow::ffi_stream::FFI_ArrowArrayStream; +use arrow::record_batch::RecordBatchReader; +use parquet::arrow::arrow_reader::{ + ArrowReaderMetadata, ArrowReaderOptions, ParquetRecordBatchReader, + ParquetRecordBatchReaderBuilder, RowSelection, RowSelector, +}; +use parquet::arrow::async_reader::{ParquetObjectReader, ParquetRecordBatchStreamBuilder}; +use parquet::arrow::ProjectionMask; +use parquet::errors::ParquetError; +use parquet::file::metadata::PageIndexPolicy; +use pyo3::exceptions::PyRuntimeError; +use pyo3::prelude::*; +use pyo3::types::PyCapsule; +use std::ffi::CString; + +use futures::StreamExt; +use object_store::aws::AmazonS3Builder; +use object_store::path::Path as ObjPath; +use object_store::ObjectStore; +use std::sync::{Arc, OnceLock}; +use tokio::sync::mpsc; + +// NOTE on allocators: earlier prototypes carried optional mimalloc/jemalloc +// global-allocator features to chase a suspected allocator-retention gap vs +// PyArrow. Measurement killed the theory (jemalloc LD_PRELOAD inert, per-worker +// high-water lower than PyArrow's on the same fixtures), and mimalloc as a +// cdylib global allocator segfaulted Ray workers across the Arrow C-stream FFI +// boundary. Both features were removed to keep the dependency tree minimal; +// the system allocator is correct here. A/B experiments can still use +// LD_PRELOAD without recompiling. + +// --------------------------------------------------------------------------- // +// Shared tokio runtime +// --------------------------------------------------------------------------- // +/// One process-wide multi-thread runtime, lazily built, shared by every +/// `read_row_groups_s3` call. Previously each fragment read built and tore down +/// its own 2-thread runtime — churn that scales with the file count. The async +/// work is IO-bound (awaiting range GETs), so a small fixed worker pool drives +/// many concurrent fetches. `worker_threads(4)` matches Ray's per-worker fragment +/// pool so decode never oversubscribes cores: either 4 fragments × K=1 unit, or +/// 1 lone fragment × K units — never both at once. +fn shared_runtime() -> &'static tokio::runtime::Runtime { + static RT: OnceLock = OnceLock::new(); + RT.get_or_init(|| { + tokio::runtime::Builder::new_multi_thread() + .worker_threads(4) + .enable_all() + .build() + .expect("build shared tokio runtime") + }) +} + +// --------------------------------------------------------------------------- // +// Byte-budget batch sizing (ported from main.rs `byte_budget_rows`) +// --------------------------------------------------------------------------- // +/// Choose a batch row count so `rows * bytes_per_row ~= budget_bytes`, using the +/// row group's uncompressed size / row count from the footer. `requested` is the +/// upper clamp (a narrow schema never grows past the caller's ask) and 2048 is the +/// lower clamp (a very wide schema never collapses to a pathologically tiny batch). +/// This is what keeps the decoded working set flat across schemas. +fn byte_budget_rows( + uncompressed_bytes: i64, + num_rows: i64, + requested: usize, + budget_bytes: u64, +) -> usize { + if num_rows <= 0 { + return requested; + } + let bpr = (uncompressed_bytes as f64 / num_rows as f64).max(1.0); + let budget_rows = (budget_bytes as f64 / bpr) as usize; + budget_rows.clamp(2048, requested.max(2048)) +} + +// --------------------------------------------------------------------------- // +// Row-group statistics pruning (predicate pushdown, part 1) +// --------------------------------------------------------------------------- // +/// Map one column chunk's Parquet statistics to `(min, max)` in `Value` terms. +/// Types we can't order for pruning (Int96, fixed-len byte arrays, non-UTF8 +/// byte arrays) return `None`, which `can_match` treats as "keep". +fn stat_min_max(stats: &Statistics) -> (Option, Option) { + match stats { + Statistics::Boolean(v) => ( + v.min_opt().map(|b| Value::Bool(*b)), + v.max_opt().map(|b| Value::Bool(*b)), + ), + Statistics::Int32(v) => ( + v.min_opt().map(|x| Value::Int(*x as i64)), + v.max_opt().map(|x| Value::Int(*x as i64)), + ), + Statistics::Int64(v) => ( + v.min_opt().map(|x| Value::Int(*x)), + v.max_opt().map(|x| Value::Int(*x)), + ), + Statistics::Float(v) => ( + v.min_opt().map(|x| Value::Float(*x as f64)), + v.max_opt().map(|x| Value::Float(*x as f64)), + ), + Statistics::Double(v) => ( + v.min_opt().map(|x| Value::Float(*x)), + v.max_opt().map(|x| Value::Float(*x)), + ), + Statistics::ByteArray(v) => ( + v.min_opt() + .and_then(|b| b.as_utf8().ok().map(|s| Value::Str(s.to_string()))), + v.max_opt() + .and_then(|b| b.as_utf8().ok().map(|s| Value::Str(s.to_string()))), + ), + // Int96 (legacy timestamps) and FixedLenByteArray: not ordered here. + _ => (None, None), + } +} + +/// Build the per-column statistics map for one row group. Keyed by the leaf +/// column path string, which equals the field name for the flat columns +/// predicates push on; nested paths (dotted) simply won't match a top-level +/// predicate column and are left un-pruned (conservative). +fn row_group_col_stats(rg: &RowGroupMetaData) -> HashMap { + let num_rows = rg.num_rows(); + let mut map = HashMap::with_capacity(rg.num_columns()); + for i in 0..rg.num_columns() { + let col = rg.column(i); + if let Some(stats) = col.statistics() { + let (min, max) = stat_min_max(stats); + let null_count = stats.null_count_opt().map(|n| n as i64); + map.insert( + col.column_path().string(), + ColStats { + min, + max, + null_count, + num_rows, + }, + ); + } + } + map +} + +/// Drop the row groups in `selected` that `pred` proves cannot contain a match. +/// Conservative by construction (see `predicate::can_match`): a row group is +/// removed only when provably empty for the predicate, so this never drops a +/// group that could have contributed rows. +fn prune_row_groups(meta: &ArrowReaderMetadata, selected: Vec, pred: &Pred) -> Vec { + let md = meta.metadata(); + selected + .into_iter() + .filter(|&rg| can_match(pred, &row_group_col_stats(md.row_group(rg)))) + .collect() +} + +/// Parse the optional predicate IR and prune `selected` in one step; `None` +/// (no pushdown) returns `selected` unchanged. +fn apply_predicate( + meta: &ArrowReaderMetadata, + selected: Vec, + predicate_json: &Option, +) -> Vec { + match predicate_json { + None => selected, + Some(j) => prune_row_groups(meta, selected, &Pred::from_json(j)), + } +} + +// --------------------------------------------------------------------------- // +// Column projection helper +// --------------------------------------------------------------------------- // +/// Build a leaf-column ProjectionMask from column names using the parquet schema +/// descriptor. Names not present are ignored (Python already resolved the read +/// set). Flat schemas only — the Python `_arrow_rs_supported` gate rejects nested +/// columns before we get here. +fn projection_mask( + parquet_schema: &parquet::schema::types::SchemaDescriptor, + columns: &Option>, +) -> ProjectionMask { + match columns { + None => ProjectionMask::all(), + Some(names) => { + let root = parquet_schema.root_schema(); + let mut indices = Vec::new(); + for (i, f) in root.get_fields().iter().enumerate() { + if names.iter().any(|n| n == f.name()) { + indices.push(i); + } + } + ProjectionMask::roots(parquet_schema, indices) + } + } +} + +/// Probe the projected output schema with an empty (zero row group) reader, so +/// `schema()` is available to the FFI stream before any batch is pulled. +fn probe_schema( + path: &str, + meta: &ArrowReaderMetadata, + mask: &ProjectionMask, +) -> Result { + Ok( + ParquetRecordBatchReaderBuilder::new_with_metadata(File::open(path)?, meta.clone()) + .with_projection(mask.clone()) + .with_row_groups(vec![]) + .build()? + .schema(), + ) +} + +// --------------------------------------------------------------------------- // +// Arrow C-stream wrapper returned to Python +// --------------------------------------------------------------------------- // +/// Holds an FFI stream until Python pulls it out via `__arrow_c_stream__`. +#[pyclass] +struct ArrowStream { + inner: Option, +} + +#[pymethods] +impl ArrowStream { + /// PyCapsule protocol: PyArrow's `RecordBatchReader.from_stream` calls this. + #[pyo3(signature = (_requested_schema=None))] + fn __arrow_c_stream__<'py>( + &mut self, + py: Python<'py>, + _requested_schema: Option, + ) -> PyResult> { + let stream = self + .inner + .take() + .ok_or_else(|| PyRuntimeError::new_err("stream already consumed"))?; + let name = CString::new("arrow_array_stream").unwrap(); + PyCapsule::new_bound(py, stream, Some(name)) + } +} + +fn into_py_stream(reader: Box) -> ArrowStream { + ArrowStream { + inner: Some(FFI_ArrowArrayStream::new(reader)), + } +} + +// --------------------------------------------------------------------------- // +// Footer metadata returned to Python (Track 1: arrow-rs owns the footer read) +// --------------------------------------------------------------------------- // +/// The parts of the Parquet footer the Python reader needs so PyArrow no longer +/// has to open the file for supported fragments: the full Arrow schema (exposed +/// zero-copy via the Arrow C-schema PyCapsule, so it round-trips extension/field +/// metadata for the UDT path) plus per-row-group row counts and byte sizes (for +/// chunking, row-offset bookkeeping, `count()`, and the split threshold). Column +/// statistics for row-group pruning are a follow-up on this same struct. +#[pyclass] +struct ParquetFileMetadata { + schema: SchemaRef, + #[pyo3(get)] + num_rows: i64, + #[pyo3(get)] + num_row_groups: usize, + #[pyo3(get)] + row_group_num_rows: Vec, + #[pyo3(get)] + row_group_byte_sizes: Vec, + // Per-row-group *compressed* (on-disk) byte size — the sum of each column + // chunk's compressed size. This is what the Python chunker bundles by, so it + // must match PyArrow's `sum(col.total_compressed_size)`. Distinct from + // `row_group_byte_sizes`, which is the *uncompressed* `total_byte_size()`. + #[pyo3(get)] + row_group_compressed_sizes: Vec, + // Root (top-level) column names that contain an INT96-physical leaf. The + // support gate needs this because parquet-rs honors an embedded Arrow-schema + // unit hint for INT96 (→ us/ms/s) whereas PyArrow always forces ns: a column + // in this list whose decoded unit isn't ns would diverge from PyArrow, so the + // gate must fall it back. INT96 columns that come out as ns already match. + #[pyo3(get)] + int96_columns: Vec, +} + +#[pymethods] +impl ParquetFileMetadata { + /// Arrow PyCapsule protocol: `pa.schema(obj)` / `Schema._import_from_c_capsule` + /// pull the schema through this. Rebuilt each call (cheap, non-consuming). + fn __arrow_c_schema__<'py>(&self, py: Python<'py>) -> PyResult> { + let ffi = FFI_ArrowSchema::try_from(self.schema.as_ref()).map_err(to_py)?; + let name = CString::new("arrow_schema").unwrap(); + PyCapsule::new_bound(py, ffi, Some(name)) + } +} + +/// Reader options shared by *every* entry point (metadata reads, local decode, +/// S3 decode), so the schema a metadata read reports can never diverge from what +/// a decode produces. `page_index` varies by caller: pruning paths ask for the +/// page index (`Optional`); a bare footer/metadata read skips it (`Skip`). +/// +/// INT96 note: parquet-rs decodes the legacy INT96 timestamp physical type to +/// `Timestamp(Nanosecond, None)` by default (arrow/schema/primitive.rs), which is +/// exactly what PyArrow produces for INT96 by default — so a Spark/Hive/Impala +/// INT96 file (the common producers, which embed no Arrow schema) decodes +/// byte-identically on both paths and takes the native path with no coercion. +/// The one divergence is a file that embeds an Arrow schema pinning a *non-ns* +/// unit (e.g. a PyArrow writer with `use_deprecated_int96_timestamps=True` over a +/// `timestamp[us]` column): parquet-rs honors that embedded hint (→ us) while +/// PyArrow forces ns. That mismatch is caught by the support gate's +/// per-file-vs-unified type check, which falls the file back to PyArrow — correct, +/// if not yet native. parquet 59 has no `with_coerce_int96`, so forcing ns there +/// would need a per-column `with_schema` override; deferred (narrow case, and the +/// fallback is already correct). +fn reader_options(page_index: PageIndexPolicy) -> ArrowReaderOptions { + ArrowReaderOptions::new().with_page_index_policy(page_index) +} + +/// Pull the fields Python needs out of an already-loaded `ArrowReaderMetadata`. +/// Local and S3 both funnel through here so the shape is identical. +fn build_file_metadata(meta: &ArrowReaderMetadata) -> ParquetFileMetadata { + let md = meta.metadata(); + let n = md.num_row_groups(); + let mut row_group_num_rows = Vec::with_capacity(n); + let mut row_group_byte_sizes = Vec::with_capacity(n); + let mut row_group_compressed_sizes = Vec::with_capacity(n); + let mut num_rows = 0i64; + for i in 0..n { + let rg = md.row_group(i); + row_group_num_rows.push(rg.num_rows()); + row_group_byte_sizes.push(rg.total_byte_size()); + row_group_compressed_sizes.push(rg.compressed_size()); + num_rows += rg.num_rows(); + } + + // Collect the root column names backing an INT96 leaf. Walk the flat leaf + // descriptors and key by the first path component so a nested INT96 (e.g. a + // struct field) still surfaces its top-level column to the gate. + let mut int96_roots: HashSet = HashSet::new(); + for col in md.file_metadata().schema_descr().columns() { + if col.physical_type() == PhysicalType::INT96 { + if let Some(root) = col.path().parts().first() { + int96_roots.insert(root.clone()); + } + } + } + + ParquetFileMetadata { + schema: meta.schema().clone(), + num_rows, + num_row_groups: n, + row_group_num_rows, + row_group_byte_sizes, + row_group_compressed_sizes, + int96_columns: int96_roots.into_iter().collect(), + } +} + +// --------------------------------------------------------------------------- // +// Local read (sync): per-group byte-budgeted sequential reader (K=1 path) +// --------------------------------------------------------------------------- // +/// Streams the selected row groups in order, building one `ParquetRecordBatchReader` +/// per group with a byte-budgeted batch size. Row order is preserved (single +/// reader, groups in ascending order) and peak memory stays ~one decode budget +/// because each batch is dropped as Python pulls the next. +struct RowGroupSeqReader { + path: String, + meta: ArrowReaderMetadata, + mask: ProjectionMask, + budget_bytes: u64, + batch_clamp: usize, + row_groups: Vec, + pos: usize, + current: Option, + schema: SchemaRef, +} + +impl RowGroupSeqReader { + fn new( + path: String, + meta: ArrowReaderMetadata, + mask: ProjectionMask, + schema: SchemaRef, + row_groups: Vec, + batch_clamp: usize, + budget_bytes: u64, + ) -> Self { + Self { + path, + meta, + mask, + budget_bytes, + batch_clamp, + row_groups, + pos: 0, + current: None, + schema, + } + } + + fn build_group_reader(&self, rg: usize) -> Result { + let rgm = self.meta.metadata().row_group(rg); + let eff = byte_budget_rows( + rgm.total_byte_size(), + rgm.num_rows(), + self.batch_clamp, + self.budget_bytes, + ); + ParquetRecordBatchReaderBuilder::new_with_metadata( + File::open(&self.path)?, + self.meta.clone(), + ) + .with_batch_size(eff) + .with_row_groups(vec![rg]) + .with_projection(self.mask.clone()) + .build() + } +} + +impl Iterator for RowGroupSeqReader { + type Item = Result; + fn next(&mut self) -> Option { + loop { + if let Some(reader) = self.current.as_mut() { + match reader.next() { + Some(batch) => return Some(batch), + None => self.current = None, + } + } + if self.pos >= self.row_groups.len() { + return None; + } + let rg = self.row_groups[self.pos]; + self.pos += 1; + match self.build_group_reader(rg) { + Ok(reader) => self.current = Some(reader), + Err(e) => return Some(Err(ArrowError::ExternalError(Box::new(e)))), + } + } + } +} + +impl RecordBatchReader for RowGroupSeqReader { + fn schema(&self) -> SchemaRef { + self.schema.clone() + } +} + +// --------------------------------------------------------------------------- // +// Local read (sync): intra-fragment K-split for one big row group +// --------------------------------------------------------------------------- // +/// Splits one row group's rows into K contiguous ranges decoded by K threads, +/// merging them back in range order so output row order matches a sequential read. +/// Each range has its own bounded channel (backpressure), and the consumer drains +/// channels in ascending range order — so at most `k * channel_depth` batches are +/// resident and rows come out in file order. Requires the offset/page index so a +/// `RowSelection` fetches only its range's pages (else each worker would decode the +/// whole column chunk); the caller checks this before choosing this path. +struct ParallelRangeReader { + schema: SchemaRef, + receivers: Vec>>, + cur: usize, +} + +fn build_range_reader( + path: &str, + meta: &ArrowReaderMetadata, + mask: &ProjectionMask, + rg: usize, + start: usize, + len: usize, + batch: usize, +) -> Result { + let sel = RowSelection::from(vec![RowSelector::skip(start), RowSelector::select(len)]); + ParquetRecordBatchReaderBuilder::new_with_metadata(File::open(path)?, meta.clone()) + .with_row_groups(vec![rg]) + .with_row_selection(sel) + .with_batch_size(batch) + .with_projection(mask.clone()) + .build() +} + +impl ParallelRangeReader { + fn spawn( + path: String, + meta: ArrowReaderMetadata, + mask: ProjectionMask, + schema: SchemaRef, + rg: usize, + total_rows: usize, + k: usize, + batch: usize, + ) -> Self { + let chunk = total_rows.div_ceil(k.max(1)).max(1); + let mut receivers = Vec::new(); + let mut start = 0usize; + while start < total_rows { + let len = chunk.min(total_rows - start); + // Depth 2: a worker may run one batch ahead of the consumer, no more. + let (tx, rx) = sync_channel::>(2); + receivers.push(rx); + let (path, meta, mask) = (path.clone(), meta.clone(), mask.clone()); + thread::spawn(move || { + match build_range_reader(&path, &meta, &mask, rg, start, len, batch) { + Ok(reader) => { + for batch in reader { + if tx.send(batch).is_err() { + break; // consumer dropped + } + } + } + Err(e) => { + let _ = tx.send(Err(ArrowError::ExternalError(Box::new(e)))); + } + } + }); + start += len; + } + Self { + schema, + receivers, + cur: 0, + } + } +} + +impl Iterator for ParallelRangeReader { + type Item = Result; + fn next(&mut self) -> Option { + while self.cur < self.receivers.len() { + match self.receivers[self.cur].recv() { + Ok(item) => return Some(item), + Err(_) => self.cur += 1, // this range's channel closed → next range + } + } + None + } +} + +impl RecordBatchReader for ParallelRangeReader { + fn schema(&self) -> SchemaRef { + self.schema.clone() + } +} + +// --------------------------------------------------------------------------- // +// Local entry point: choose sequential vs K-split +// --------------------------------------------------------------------------- // +#[allow(clippy::too_many_arguments)] +fn open_local_reader( + path: String, + row_groups: Option>, + columns: Option>, + batch_size: usize, + budget_bytes: u64, + k: usize, + split_threshold_bytes: u64, + predicate_json: Option, +) -> Result, ParquetError> { + // Lean footer parse (#6): the page index is only needed for the K-split + // RowSelection (to skip pages by byte range). K-split can only fire when k > 1, + // so for the common k == 1 local path we Skip the page index entirely — a + // cheaper footer parse that matters on many-row-group files. When k > 1 we load + // it Optional so the lone-big-row-group split can use it if present. + let policy = if k > 1 { + PageIndexPolicy::Optional + } else { + PageIndexPolicy::Skip + }; + let opts = reader_options(policy); + let meta = ArrowReaderMetadata::load(&File::open(&path)?, opts)?; + let mask = projection_mask(meta.metadata().file_metadata().schema_descr(), &columns); + let selected: Vec = match row_groups { + Some(v) => v, + None => (0..meta.metadata().num_row_groups()).collect(), + }; + // Statistics-based row-group pruning (conservative — see predicate.rs). This + // is the mechanism that replaces PyArrow's `fragment.subset(filter=...)` so + // pruned groups are never fetched or decoded. + let selected = apply_predicate(&meta, selected, &predicate_json); + let schema = probe_schema(&path, &meta, &mask)?; + + // K-split only for a *single* row group above the threshold, and only when the + // page index is present (else each range would decode the whole column chunk). + // This is exactly the lone-big-fragment case Ray's pool can't parallelize; every + // other layout uses the sequential path so crate-K and Ray's pool never multiply. + let split = k > 1 + && selected.len() == 1 + && meta.metadata().row_group(selected[0]).total_byte_size() as u64 >= split_threshold_bytes + && meta.metadata().offset_index().is_some(); + + if split { + let rg = selected[0]; + let rgm = meta.metadata().row_group(rg); + let total_rows = rgm.num_rows().max(0) as usize; + let eff = byte_budget_rows( + rgm.total_byte_size(), + rgm.num_rows(), + batch_size, + budget_bytes, + ); + Ok(Box::new(ParallelRangeReader::spawn( + path, meta, mask, schema, rg, total_rows, k, eff, + ))) + } else { + Ok(Box::new(RowGroupSeqReader::new( + path, + meta, + mask, + schema, + selected, + batch_size, + budget_bytes, + ))) + } +} + +#[pyfunction] +#[pyo3(signature = (path, row_groups=None, columns=None, batch_size=131072, decode_budget_bytes=2*1024*1024, k=1, split_threshold_bytes=134217728, predicate_json=None))] +#[allow(clippy::too_many_arguments)] +fn read_row_groups( + path: String, + row_groups: Option>, + columns: Option>, + batch_size: usize, + decode_budget_bytes: u64, + k: usize, + split_threshold_bytes: u64, + // Optional predicate IR (JSON, built from the Ray `Expr`) for statistics + // row-group pruning. None = no pushdown. Row-level filtering still happens + // in Python post-decode, so this only avoids IO/decode, never changes rows. + predicate_json: Option, +) -> PyResult { + let reader = open_local_reader( + path, + row_groups, + columns, + batch_size, + decode_budget_bytes, + k, + split_threshold_bytes, + predicate_json, + ) + .map_err(to_py)?; + Ok(into_py_stream(reader)) +} + +// --------------------------------------------------------------------------- // +// S3 read (async, windowed, byte-budgeted, order-preserving) +// --------------------------------------------------------------------------- // +/// Number of decoded batches a unit task may run ahead of the consumer. Depth 2 +/// bounds resident memory while still letting a task fetch/decode one batch ahead. +const S3_CHANNEL_DEPTH: usize = 2; + +/// Per-window decoded buffer, used by the `prefetch_windows` pipeline. Kept at 1: +/// the cross-window prefetch (fetching window N+1 while N decodes) is what hides S3 +/// latency; we do NOT also want each in-flight window buffering several decoded +/// batches, which would multiply the decode transient. So each window may hold at +/// most one decoded batch, and `prefetch_windows` controls how many windows are in +/// flight at once. +const S3_WINDOW_CHANNEL_DEPTH: usize = 1; + +/// A sync `RecordBatchReader` fed by K background tokio tasks (one per row-range +/// unit), each draining its unit into a bounded async channel. The consumer drains +/// channels in ascending unit order — so at most `k * S3_CHANNEL_DEPTH` batches are +/// resident and rows come out in file order (K units are contiguous ascending +/// ranges). `blocking_recv` is called from the Python thread (outside the runtime), +/// which is exactly what tokio's mpsc supports. +struct S3ChannelReader { + schema: SchemaRef, + receivers: Vec>>, + cur: usize, +} + +impl Iterator for S3ChannelReader { + type Item = Result; + fn next(&mut self) -> Option { + while self.cur < self.receivers.len() { + match self.receivers[self.cur].blocking_recv() { + Some(item) => return Some(item), + None => self.cur += 1, // this unit's channel closed → next unit + } + } + None + } +} + +impl RecordBatchReader for S3ChannelReader { + fn schema(&self) -> SchemaRef { + self.schema.clone() + } +} + +/// Rows per fetch window from a byte budget over the row group's *compressed* +/// bytes/row — this bounds IN-FLIGHT NETWORK bytes (what we fetch before decode). +/// 0 means "whole range in one shot" (no window cap). +fn window_rows_for(rgm: &parquet::file::metadata::RowGroupMetaData, fetch_window_mb: u64) -> usize { + if fetch_window_mb == 0 { + return 0; + } + let comp = rgm.compressed_size().max(1) as f64; + let rows = rgm.num_rows().max(1) as f64; + let comp_bpr = (comp / rows).max(1.0); + (((fetch_window_mb as f64) * 1024.0 * 1024.0) / comp_bpr).max(1.0) as usize +} + +/// Spawn a background task that fetches + decodes ONE fetch window — rows +/// `[w, w+wlen)` within row group `rg` — streaming its batches into a bounded +/// channel, and return the receiver. Building the stream is cheap (metadata is +/// already loaded); the S3 fetch for this window's pages is issued when the task +/// first polls the stream. So the moment this returns, that fetch is in flight on +/// the runtime — which is what lets the caller prefetch window N+1 while draining +/// window N. `S3_WINDOW_CHANNEL_DEPTH` bounds how far ahead a single window decodes. +fn spawn_window( + store: Arc, + path: ObjPath, + meta: ArrowReaderMetadata, + mask: ProjectionMask, + rg: usize, + w: usize, + wlen: usize, + batch_rows: usize, +) -> mpsc::Receiver> { + let (tx, rx) = mpsc::channel::>(S3_WINDOW_CHANNEL_DEPTH); + tokio::spawn(async move { + // Select rows [w, w+wlen) WITHIN this row group (we restrict to `rg`), so + // only this window's pages are fetched (page index skips the rest by byte + // range). + let sel = RowSelection::from(vec![RowSelector::skip(w), RowSelector::select(wlen)]); + let reader = ParquetObjectReader::new(store, path); + let built = ParquetRecordBatchStreamBuilder::new_with_metadata(reader, meta) + .with_row_groups(vec![rg]) + .with_row_selection(sel) + .with_batch_size(batch_rows) + .with_projection(mask) + .build(); + let mut stream = match built { + Ok(s) => s, + Err(e) => { + let _ = tx.send(Err(ArrowError::ExternalError(Box::new(e)))).await; + return; + } + }; + while let Some(item) = stream.next().await { + let is_err = item.is_err(); + let msg = item.map_err(|e| ArrowError::ExternalError(Box::new(e))); + if tx.send(msg).await.is_err() { + return; // consumer dropped + } + if is_err { + return; + } + } + }); + rx +} + +/// Drive one unit (a list of contiguous `(rg, start, len)` sub-ranges, in order) +/// over the async object store, sending decoded batches to `tx` in row order. +/// +/// The unit's rows are sliced into fetch windows, each holding ~`fetch_window_mb` +/// of compressed bytes (knob 2); the decode batch inside a window is byte-budgeted +/// (knob 1). `prefetch_windows` (knob 3) is the pipeline depth: we keep that many +/// window decoders in flight at once via [`spawn_window`], draining their channels +/// in window order. depth=1 is the old strictly-serial behavior (fetch W0, decode +/// W0, fetch W1, ...); depth=2 issues window N+1's S3 fetch while window N decodes, +/// hiding the fetch latency behind the decode. Resident memory stays bounded to +/// ~`prefetch_windows` windows of compressed bytes (plus one decoded batch each) — +/// far below a whole-row-group prefetch, and still a knob. +#[allow(clippy::too_many_arguments)] +async fn drive_unit( + store: Arc, + path: ObjPath, + meta: ArrowReaderMetadata, + mask: ProjectionMask, + subranges: Vec<(usize, usize, usize)>, + budget_bytes: u64, + batch_clamp: usize, + fetch_window_mb: u64, + prefetch_windows: usize, + tx: mpsc::Sender>, +) { + // Flatten every (row group, window) this unit will read into one ordered list + // of specs. We enumerate here only — no fetch happens until a window is spawned. + let mut specs: Vec<(usize, usize, usize, usize)> = Vec::new(); // (rg, w, wlen, batch_rows) + for (rg, start, len) in subranges { + let rgm = meta.metadata().row_group(rg); + let batch_rows = byte_budget_rows( + rgm.total_byte_size(), + rgm.num_rows(), + batch_clamp, + budget_bytes, + ); + let window_rows = window_rows_for(rgm, fetch_window_mb); + let end = start + len; + let step = if window_rows == 0 { + len.max(1) + } else { + window_rows.max(1) + }; + let mut w = start; + while w < end { + let wlen = step.min(end - w); + specs.push((rg, w, wlen, batch_rows)); + w += wlen; + } + } + + // Bounded look-ahead: keep at most `depth` window decoders in flight, draining + // their channels in spec order so output stays row-ordered while up to `depth` + // windows fetch+decode concurrently. + let depth = prefetch_windows.max(1); + let mut in_flight: VecDeque>> = VecDeque::new(); + let mut next = 0usize; + // Prime the pipeline: start `depth` window fetches concurrently. + while next < specs.len() && in_flight.len() < depth { + let (rg, w, wlen, br) = specs[next]; + in_flight.push_back(spawn_window( + store.clone(), + path.clone(), + meta.clone(), + mask.clone(), + rg, + w, + wlen, + br, + )); + next += 1; + } + while let Some(mut rx) = in_flight.pop_front() { + while let Some(item) = rx.recv().await { + let is_err = item.is_err(); + if tx.send(item).await.is_err() { + return; // consumer dropped + } + if is_err { + return; + } + } + // Front window exhausted — top the pipeline back up to `depth`, so window + // N+depth's fetch starts as soon as window N's finishes draining. + if next < specs.len() { + let (rg, w, wlen, br) = specs[next]; + in_flight.push_back(spawn_window( + store.clone(), + path.clone(), + meta.clone(), + mask.clone(), + rg, + w, + wlen, + br, + )); + next += 1; + } + } +} + +/// Build an S3 `ObjectStore` from the config recovered from the pyarrow +/// `S3FileSystem` on the Python side (`fs.__reduce__()[1][0]`) so credentialed / +/// custom-endpoint (MinIO, moto) / anonymous buckets all connect identically to +/// PyArrow. Empty/None fields are treated as unset. Shared by `read_row_groups_s3` +/// and `read_metadata_s3`. +#[allow(clippy::too_many_arguments)] +fn build_s3_store( + bucket: &str, + region: &str, + anonymous: bool, + endpoint: Option, + access_key_id: Option, + secret_access_key: Option, + session_token: Option, + allow_http: bool, + virtual_hosted_style: bool, +) -> Result, object_store::Error> { + let mut sb = AmazonS3Builder::new() + .with_bucket_name(bucket) + .with_region(region) + .with_virtual_hosted_style_request(virtual_hosted_style); + if let Some(ep) = endpoint.filter(|s| !s.is_empty()) { + sb = sb.with_endpoint(ep); + } + if allow_http { + sb = sb.with_allow_http(true); + } + if anonymous { + // No signing — public buckets. Any creds are irrelevant. + sb = sb.with_skip_signature(true); + } else { + // Explicit static creds if the S3FileSystem carried them; otherwise the + // builder falls back to the AWS credential chain (env / IMDS role). + if let Some(kid) = access_key_id.filter(|s| !s.is_empty()) { + sb = sb.with_access_key_id(kid); + } + if let Some(s) = secret_access_key.filter(|s| !s.is_empty()) { + sb = sb.with_secret_access_key(s); + } + if let Some(t) = session_token.filter(|s| !s.is_empty()) { + sb = sb.with_token(t); + } + } + Ok(Arc::new(sb.build()?)) +} + +#[pyfunction] +#[pyo3(signature = (bucket, key, region, anonymous, endpoint=None, access_key_id=None, + secret_access_key=None, session_token=None, allow_http=false, + virtual_hosted_style=false, row_groups=None, columns=None, + batch_size=131072, decode_budget_bytes=2*1024*1024, + fetch_window_mb=16, k=1, split_threshold_bytes=134217728, + prefetch_windows=2, predicate_json=None))] +#[allow(clippy::too_many_arguments)] +fn read_row_groups_s3( + bucket: String, + key: String, + region: String, + anonymous: bool, + // Full S3 config, recovered from the pyarrow S3FileSystem on the Python side + // (fs.__reduce__()[1][0]) so credentialed / custom-endpoint (MinIO, moto) / + // anonymous buckets all decode identically to PyArrow. Empty/None → unset. + endpoint: Option, + access_key_id: Option, + secret_access_key: Option, + session_token: Option, + allow_http: bool, + virtual_hosted_style: bool, + row_groups: Option>, + columns: Option>, + batch_size: usize, + decode_budget_bytes: u64, + fetch_window_mb: u64, + k: usize, + split_threshold_bytes: u64, + prefetch_windows: usize, + // See `read_row_groups`: statistics row-group pruning only. + predicate_json: Option, +) -> PyResult { + let store = build_s3_store( + &bucket, + ®ion, + anonymous, + endpoint, + access_key_id, + secret_access_key, + session_token, + allow_http, + virtual_hosted_style, + ) + .map_err(to_py)?; + let obj_path = ObjPath::from(key); + + let rt = shared_runtime(); + + // Load footer + page index ONCE (Optional so a window's RowSelection can skip + // unselected pages by byte range), and build the projected output schema up + // front from an empty stream (no network). Reporting the projected schema is + // what keeps it matching the projected batches at the FFI boundary. + let (meta, mask, schema) = rt + .block_on(async { + let opts = reader_options(PageIndexPolicy::Optional); + let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); + let meta = ArrowReaderMetadata::load_async(&mut probe, opts).await?; + let mask = projection_mask(meta.metadata().file_metadata().schema_descr(), &columns); + let schema = ParquetRecordBatchStreamBuilder::new_with_metadata( + ParquetObjectReader::new(store.clone(), obj_path.clone()), + meta.clone(), + ) + .with_projection(mask.clone()) + .with_row_groups(vec![]) + .build()? + .schema() + .clone(); + Ok::<_, parquet::errors::ParquetError>((meta, mask, schema)) + }) + .map_err(to_py)?; + + let selected: Vec = match row_groups { + Some(v) => v, + None => (0..meta.metadata().num_row_groups()).collect(), + }; + // Statistics-based pruning (conservative) before any range GET is issued, so + // pruned groups cost no S3 traffic. Same mechanism as the local path. + let selected = apply_predicate(&meta, selected, &predicate_json); + + // K-split ONLY for a lone row group above the threshold with a page index — + // the case Ray's fragment pool can't parallelize. Mirrors the local rule so + // crate-K and Ray's pool never multiply. Otherwise a single windowed stream + // (K=1) over all selected groups in order; Ray's pool parallelizes files. + let split = k > 1 + && selected.len() == 1 + && meta.metadata().row_group(selected[0]).total_byte_size() as u64 >= split_threshold_bytes + && meta.metadata().offset_index().is_some(); + + // Build the per-unit sub-range lists (each becomes one task + one channel, + // drained in order). + let units: Vec> = if split { + let rg = selected[0]; + let total_rows = meta.metadata().row_group(rg).num_rows().max(0) as usize; + let chunk = total_rows.div_ceil(k.max(1)).max(1); + let mut units = Vec::new(); + let mut start = 0usize; + while start < total_rows { + let len = chunk.min(total_rows - start); + units.push(vec![(rg, start, len)]); + start += len; + } + units + } else { + // One unit: every selected group, whole, in order. + let subranges = selected + .iter() + .map(|&rg| { + ( + rg, + 0usize, + meta.metadata().row_group(rg).num_rows().max(0) as usize, + ) + }) + .collect(); + vec![subranges] + }; + + // Spawn one task per unit on the shared runtime; collect receivers in order. + let mut receivers = Vec::with_capacity(units.len()); + for subranges in units { + let (tx, rx) = mpsc::channel::>(S3_CHANNEL_DEPTH); + receivers.push(rx); + let (store, path, meta, mask) = + (store.clone(), obj_path.clone(), meta.clone(), mask.clone()); + rt.spawn(drive_unit( + store, + path, + meta, + mask, + subranges, + decode_budget_bytes, + batch_size, + fetch_window_mb, + prefetch_windows, + tx, + )); + } + + Ok(into_py_stream(Box::new(S3ChannelReader { + schema, + receivers, + cur: 0, + }))) +} + +// --------------------------------------------------------------------------- // +// Footer-only metadata reads (Track 1): one footer parse, no data decode. +// --------------------------------------------------------------------------- // +/// Read just the Parquet footer of a local file and return schema + per-row-group +/// counts. Page index is skipped (not needed for metadata). Lets the Python reader +/// stop building a PyArrow dataset to learn the schema / row-group layout. +#[pyfunction] +fn read_metadata(path: String) -> PyResult { + let opts = reader_options(PageIndexPolicy::Skip); + let meta = + ArrowReaderMetadata::load(&File::open(&path).map_err(to_py)?, opts).map_err(to_py)?; + Ok(build_file_metadata(&meta)) +} + +/// S3 counterpart of [`read_metadata`]: one async footer fetch via `object_store`, +/// same connection config recovery as `read_row_groups_s3`. +#[pyfunction] +#[pyo3(signature = (bucket, key, region, anonymous, endpoint=None, access_key_id=None, + secret_access_key=None, session_token=None, allow_http=false, + virtual_hosted_style=false))] +#[allow(clippy::too_many_arguments)] +fn read_metadata_s3( + bucket: String, + key: String, + region: String, + anonymous: bool, + endpoint: Option, + access_key_id: Option, + secret_access_key: Option, + session_token: Option, + allow_http: bool, + virtual_hosted_style: bool, +) -> PyResult { + let store = build_s3_store( + &bucket, + ®ion, + anonymous, + endpoint, + access_key_id, + secret_access_key, + session_token, + allow_http, + virtual_hosted_style, + ) + .map_err(to_py)?; + let obj_path = ObjPath::from(key); + let rt = shared_runtime(); + let meta = rt + .block_on(async { + let opts = reader_options(PageIndexPolicy::Skip); + let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); + ArrowReaderMetadata::load_async(&mut probe, opts).await + }) + .map_err(to_py)?; + Ok(build_file_metadata(&meta)) +} + +/// Return the row-group ids of `path` that survive `predicate_json`'s statistics +/// pruning (all of them when it's None). This is the exact selection +/// `read_row_groups` would decode; exposed so callers (and tests) can observe +/// pruning without decoding, and so the pyarrow-free reader can learn the read +/// set up front. Page index is skipped (stats live in the footer). +#[pyfunction] +#[pyo3(signature = (path, predicate_json=None))] +fn select_row_groups(path: String, predicate_json: Option) -> PyResult> { + let opts = reader_options(PageIndexPolicy::Skip); + let meta = + ArrowReaderMetadata::load(&File::open(&path).map_err(to_py)?, opts).map_err(to_py)?; + let all: Vec = (0..meta.metadata().num_row_groups()).collect(); + Ok(apply_predicate(&meta, all, &predicate_json)) +} + +fn to_py(e: E) -> PyErr { + PyRuntimeError::new_err(e.to_string()) +} + +#[pymodule] +fn ray_data_arrow_rs(m: &Bound<'_, PyModule>) -> PyResult<()> { + m.add_function(wrap_pyfunction!(read_row_groups, m)?)?; + m.add_function(wrap_pyfunction!(read_row_groups_s3, m)?)?; + m.add_function(wrap_pyfunction!(read_metadata, m)?)?; + m.add_function(wrap_pyfunction!(read_metadata_s3, m)?)?; + m.add_function(wrap_pyfunction!(select_row_groups, m)?)?; + m.add_class::()?; + Ok(()) +} diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs new file mode 100644 index 000000000000..3f26610a3f37 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs @@ -0,0 +1,602 @@ +//! Predicate IR for row-group statistics pruning (Track 4, part 1). +//! +//! The Python reader lowers the pushed-down Ray `Expr` predicate into the small +//! JSON IR parsed here (see `_predicate_to_ir` on the Python side), and this +//! module decides which row groups *cannot possibly* contain a matching row and +//! so may be skipped before any data is fetched or decoded. This replaces the +//! PyArrow `fragment.subset(filter=...)` pruning the reader used to depend on, +//! which is what let PyArrow stop opening supported files. +//! +//! SOUNDNESS CONTRACT +//! ------------------ +//! [`can_match`] is *conservative*: it returns `true` (keep the row group) +//! unless the predicate is provably false for **every** row in the group given +//! its column statistics. Every source of uncertainty — a missing column, absent +//! statistics, a cross-type or NaN comparison it can't order, a `NOT`, or any op +//! it doesn't model — resolves to `true`. Over-pruning (dropping a group that +//! *could* have matched) is the only way stats pruning can silently lose rows, so +//! it is made impossible by construction: the worst a bug in here can do is keep +//! a group we could have skipped (a performance miss), never drop a live one. +//! +//! The Python reader additionally re-applies the full predicate post-decode, so +//! row-level correctness never rests on this module at all — this is purely an +//! IO/decode-avoidance optimization on top of an already-correct result. + +use std::cmp::Ordering; +use std::collections::HashMap; + +use serde::Deserialize; + +/// A scalar literal or a statistic value, in the few types Parquet statistics +/// and pushed predicates actually use. Comparisons across numeric types promote +/// to f64; every other cross-type comparison is defined as incomparable +/// (`partial_cmp` -> `None`), which the pruning logic treats as "keep". +#[derive(Debug, Clone, Deserialize)] +#[serde(tag = "vt", content = "v", rename_all = "snake_case")] +pub enum Value { + Int(i64), + Float(f64), + Str(String), + Bool(bool), + Null, +} + +impl Value { + /// Partial order used for pruning. Returns `None` (incomparable) for NaN, + /// null operands, and any cross-type pair that isn't int/float — every such + /// case makes the caller keep the row group. + pub fn partial_cmp(&self, other: &Value) -> Option { + match (self, other) { + (Value::Int(a), Value::Int(b)) => Some(a.cmp(b)), + (Value::Float(a), Value::Float(b)) => a.partial_cmp(b), + // Mixed int/float: promote to f64 (e.g. `float_col > 5`). + (Value::Int(a), Value::Float(b)) => (*a as f64).partial_cmp(b), + (Value::Float(a), Value::Int(b)) => a.partial_cmp(&(*b as f64)), + (Value::Str(a), Value::Str(b)) => Some(a.cmp(b)), + (Value::Bool(a), Value::Bool(b)) => Some(a.cmp(b)), + _ => None, + } + } + + fn is_null(&self) -> bool { + matches!(self, Value::Null) + } +} + +/// Comparison operator in a `cmp` predicate atom. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum CmpOp { + Gt, + Lt, + Ge, + Le, + Eq, + Ne, +} + +/// The predicate IR. `unknown` is the explicit catch-all the Python translator +/// emits for anything it can't lower; it always keeps the row group. +#[derive(Debug, Clone, Deserialize)] +#[serde(tag = "t", rename_all = "snake_case")] +pub enum Pred { + And { + preds: Vec, + }, + Or { + preds: Vec, + }, + // `can_match` treats any negation conservatively (keep) without inspecting + // the child, so the field is unread today; retained for a future sound + // NOT-pushdown and to keep the wire format stable. + Not { + #[allow(dead_code)] + pred: Box, + }, + Cmp { + col: String, + op: CmpOp, + value: Value, + }, + IsNull { + col: String, + }, + IsNotNull { + col: String, + }, + In { + col: String, + values: Vec, + negated: bool, + }, + Unknown, +} + +impl Pred { + /// Parse the IR from the JSON string passed across the FFI boundary. On any + /// parse error we fall back to the always-keep predicate so a malformed IR + /// degrades to "no pruning", never to an error or a wrong result. + pub fn from_json(s: &str) -> Pred { + serde_json::from_str(s).unwrap_or(Pred::Unknown) + } +} + +/// Per-column statistics for one row group, in `Value` terms. `min`/`max` are +/// `None` when the column has no statistics (Parquet may omit them). `null_count` +/// is `None` when unknown. `num_rows` is the row group's row count. +#[derive(Debug, Clone)] +pub struct ColStats { + pub min: Option, + pub max: Option, + pub null_count: Option, + pub num_rows: i64, +} + +impl ColStats { + fn all_null(&self) -> bool { + self.num_rows > 0 && self.null_count == Some(self.num_rows) + } +} + +/// True if the row group described by `stats` *could* contain a row satisfying +/// `pred`. Conservative: any uncertainty returns true. See the module contract. +pub fn can_match(pred: &Pred, stats: &HashMap) -> bool { + match pred { + // A AND B can match only if every conjunct can match: if no row can + // satisfy one conjunct, none can satisfy the whole. + Pred::And { preds } => preds.iter().all(|p| can_match(p, stats)), + // A OR B can match if any disjunct can match. + Pred::Or { preds } => preds.iter().any(|p| can_match(p, stats)), + // Negation over ranges isn't soundly prunable from min/max alone; keep. + Pred::Not { .. } => true, + Pred::Unknown => true, + Pred::Cmp { col, op, value } => match stats.get(col) { + None => true, // column absent from this group's stats -> keep + Some(cs) => cmp_can_match(cs, *op, value), + }, + Pred::IsNull { col } => match stats.get(col) { + None => true, + // Keep unless we know there are zero nulls. + Some(cs) => cs.null_count != Some(0), + }, + Pred::IsNotNull { col } => match stats.get(col) { + None => true, + // Keep unless every row is null. + Some(cs) => !cs.all_null(), + }, + Pred::In { + col, + values, + negated, + } => { + if *negated { + return true; // NOT IN can't be pruned from min/max; keep. + } + match stats.get(col) { + None => true, + Some(cs) => { + if cs.all_null() { + return false; // all rows null -> none in the set + } + // Keep if any listed value could fall within [min, max]. + values.iter().any(|v| value_in_range(cs, v)) + } + } + } + } +} + +/// Whether `v` is possibly within `[min, max]` (used for IN and EQ). Unknown +/// bounds or incomparable values -> possible (keep). +fn value_in_range(cs: &ColStats, v: &Value) -> bool { + if v.is_null() { + return true; // null-in-set semantics are subtle; stay conservative. + } + let below_min = match &cs.min { + Some(mn) => matches!(v.partial_cmp(mn), Some(Ordering::Less)), + None => false, + }; + let above_max = match &cs.max { + Some(mx) => matches!(v.partial_cmp(mx), Some(Ordering::Greater)), + None => false, + }; + !(below_min || above_max) +} + +/// Row-group verdict for a single `col OP value` atom. Returns true to keep. +fn cmp_can_match(cs: &ColStats, op: CmpOp, v: &Value) -> bool { + // A comparison against a null literal is null (=> false) for every row; + // but this shape is unusual, so keep rather than reason about it. + if v.is_null() { + return true; + } + // Every row is null => every comparison is null => false for all => prune. + if cs.all_null() { + return false; + } + match op { + // Keep iff some value can exceed / reach the bound. + CmpOp::Gt => keep_if(&cs.max, v, |o| o == Ordering::Greater), + CmpOp::Ge => keep_if(&cs.max, v, |o| o != Ordering::Less), + CmpOp::Lt => keep_if(&cs.min, v, |o| o == Ordering::Less), + CmpOp::Le => keep_if(&cs.min, v, |o| o != Ordering::Greater), + // v in [min, max] is a necessary condition for equality to be possible. + CmpOp::Eq => value_in_range(cs, v), + // col != v is false for all only if the column is the constant v with no + // nulls; that needs min==max==v && null_count==0. Otherwise keep. + CmpOp::Ne => { + let is_constant_v = matches!( + (&cs.min, &cs.max), + (Some(mn), Some(mx)) + if matches!(mn.partial_cmp(v), Some(Ordering::Equal)) + && matches!(mx.partial_cmp(v), Some(Ordering::Equal)) + ); + !(is_constant_v && cs.null_count == Some(0)) + } + } +} + +/// Keep the group iff `bound` is known and `pred(bound.cmp(v))` holds. An unknown +/// bound or an incomparable pair (`partial_cmp` -> None, e.g. NaN) keeps it. +fn keep_if(bound: &Option, v: &Value, pred: impl Fn(Ordering) -> bool) -> bool { + match bound { + None => true, + Some(b) => match b.partial_cmp(v) { + Some(ord) => pred(ord), + None => true, + }, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn cs(min: i64, max: i64, nulls: i64, rows: i64) -> ColStats { + ColStats { + min: Some(Value::Int(min)), + max: Some(Value::Int(max)), + null_count: Some(nulls), + num_rows: rows, + } + } + + fn stats(pairs: &[(&str, ColStats)]) -> HashMap { + pairs + .iter() + .map(|(k, v)| (k.to_string(), v.clone())) + .collect() + } + + fn cmp(col: &str, op: CmpOp, v: i64) -> Pred { + Pred::Cmp { + col: col.into(), + op, + value: Value::Int(v), + } + } + + // ---- the sorted-id / row-group example from the Python pruning test ---- + #[test] + fn ge_prunes_groups_below_threshold() { + // Four row groups of a sorted id column: [0,999] [1000,1999] ... + let groups = [(0, 999), (1000, 1999), (2000, 2999), (3000, 3999)]; + let pred = cmp("id", CmpOp::Ge, 3000); + let kept: Vec = groups + .iter() + .enumerate() + .filter(|(_, (lo, hi))| can_match(&pred, &stats(&[("id", cs(*lo, *hi, 0, 1000))]))) + .map(|(i, _)| i) + .collect(); + assert_eq!( + kept, + vec![3], + "only the [3000,3999] group can satisfy id>=3000" + ); + } + + #[test] + fn ge_prunes_everything_when_out_of_range() { + let pred = cmp("id", CmpOp::Ge, 1_000_000_000); + assert!(!can_match(&pred, &stats(&[("id", cs(0, 3999, 0, 4000))]))); + } + + // ---- per-op boundary behavior ---- + #[test] + fn gt_boundary() { + // max == v: no row is strictly greater -> prune. + assert!(!can_match( + &cmp("x", CmpOp::Gt, 10), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + assert!(can_match( + &cmp("x", CmpOp::Gt, 9), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + } + + #[test] + fn lt_le_use_min() { + assert!(!can_match( + &cmp("x", CmpOp::Lt, 0), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + assert!(can_match( + &cmp("x", CmpOp::Lt, 1), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + assert!(!can_match( + &cmp("x", CmpOp::Le, -1), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + assert!(can_match( + &cmp("x", CmpOp::Le, 0), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + } + + #[test] + fn eq_outside_range_prunes() { + assert!(!can_match( + &cmp("x", CmpOp::Eq, 11), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + assert!(!can_match( + &cmp("x", CmpOp::Eq, -1), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + assert!(can_match( + &cmp("x", CmpOp::Eq, 5), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + } + + #[test] + fn ne_only_prunes_constant_column() { + // min==max==v, no nulls -> col != v false for all -> prune. + assert!(!can_match( + &cmp("x", CmpOp::Ne, 7), + &stats(&[("x", cs(7, 7, 0, 3))]) + )); + // a null present -> keep (null != v is null, but rows differ anyway keep) + assert!(can_match( + &cmp("x", CmpOp::Ne, 7), + &stats(&[("x", cs(7, 7, 1, 3))]) + )); + // range wider than {v} -> keep + assert!(can_match( + &cmp("x", CmpOp::Ne, 7), + &stats(&[("x", cs(0, 10, 0, 3))]) + )); + } + + // ---- conservative fallbacks: every uncertainty keeps ---- + #[test] + fn missing_column_keeps() { + assert!(can_match( + &cmp("absent", CmpOp::Gt, 100), + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + } + + #[test] + fn unknown_bounds_keep() { + let s = stats(&[( + "x", + ColStats { + min: None, + max: None, + null_count: None, + num_rows: 5, + }, + )]); + assert!(can_match(&cmp("x", CmpOp::Gt, 10_000), &s)); + assert!(can_match(&cmp("x", CmpOp::Eq, 10_000), &s)); + } + + #[test] + fn cross_type_compare_keeps() { + // string literal against an int column -> incomparable -> keep. + let pred = Pred::Cmp { + col: "x".into(), + op: CmpOp::Gt, + value: Value::Str("abc".into()), + }; + assert!(can_match(&pred, &stats(&[("x", cs(0, 10, 0, 5))]))); + } + + #[test] + fn nan_bounds_keep() { + let s = stats(&[( + "f", + ColStats { + min: Some(Value::Float(f64::NAN)), + max: Some(Value::Float(f64::NAN)), + null_count: Some(0), + num_rows: 5, + }, + )]); + let pred = Pred::Cmp { + col: "f".into(), + op: CmpOp::Gt, + value: Value::Float(1.0), + }; + assert!(can_match(&pred, &s)); + } + + #[test] + fn int_float_promotion() { + // float column, int literal. + let s = stats(&[( + "f", + ColStats { + min: Some(Value::Float(0.0)), + max: Some(Value::Float(2.5)), + null_count: Some(0), + num_rows: 5, + }, + )]); + assert!(!can_match( + &Pred::Cmp { + col: "f".into(), + op: CmpOp::Gt, + value: Value::Int(3) + }, + &s + )); + assert!(can_match( + &Pred::Cmp { + col: "f".into(), + op: CmpOp::Gt, + value: Value::Int(2) + }, + &s + )); + } + + // ---- null-count driven ---- + #[test] + fn all_null_group_prunes_comparisons_and_in() { + let s = stats(&[("x", cs(0, 0, 5, 5))]); // all 5 rows null + assert!(!can_match(&cmp("x", CmpOp::Gt, -100), &s)); + assert!(!can_match(&cmp("x", CmpOp::Eq, 0), &s)); + assert!(!can_match( + &Pred::In { + col: "x".into(), + values: vec![Value::Int(0)], + negated: false + }, + &s + )); + } + + #[test] + fn is_null_and_is_not_null() { + // no nulls + assert!(!can_match( + &Pred::IsNull { col: "x".into() }, + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + assert!(can_match( + &Pred::IsNotNull { col: "x".into() }, + &stats(&[("x", cs(0, 10, 0, 5))]) + )); + // all null + assert!(can_match( + &Pred::IsNull { col: "x".into() }, + &stats(&[("x", cs(0, 0, 5, 5))]) + )); + assert!(!can_match( + &Pred::IsNotNull { col: "x".into() }, + &stats(&[("x", cs(0, 0, 5, 5))]) + )); + // some null + assert!(can_match( + &Pred::IsNull { col: "x".into() }, + &stats(&[("x", cs(0, 10, 2, 5))]) + )); + assert!(can_match( + &Pred::IsNotNull { col: "x".into() }, + &stats(&[("x", cs(0, 10, 2, 5))]) + )); + } + + // ---- IN ---- + #[test] + fn in_prunes_when_no_value_in_range() { + let s = stats(&[("x", cs(0, 10, 0, 5))]); + assert!(!can_match( + &Pred::In { + col: "x".into(), + values: vec![Value::Int(20), Value::Int(30)], + negated: false + }, + &s + )); + assert!(can_match( + &Pred::In { + col: "x".into(), + values: vec![Value::Int(20), Value::Int(5)], + negated: false + }, + &s + )); + // NOT IN never prunes. + assert!(can_match( + &Pred::In { + col: "x".into(), + values: vec![Value::Int(20)], + negated: true + }, + &s + )); + } + + // ---- boolean composition ---- + #[test] + fn and_prunes_if_any_conjunct_prunes() { + let s = stats(&[("x", cs(0, 10, 0, 5)), ("y", cs(0, 10, 0, 5))]); + // x > 5 (possible) AND y > 100 (impossible) -> prune + let p = Pred::And { + preds: vec![cmp("x", CmpOp::Gt, 5), cmp("y", CmpOp::Gt, 100)], + }; + assert!(!can_match(&p, &s)); + // x > 5 AND y > 5 -> both possible -> keep + let p2 = Pred::And { + preds: vec![cmp("x", CmpOp::Gt, 5), cmp("y", CmpOp::Gt, 5)], + }; + assert!(can_match(&p2, &s)); + } + + #[test] + fn or_keeps_if_any_disjunct_possible() { + let s = stats(&[("x", cs(0, 10, 0, 5))]); + // x > 100 (impossible) OR x < 5 (possible) -> keep + let p = Pred::Or { + preds: vec![cmp("x", CmpOp::Gt, 100), cmp("x", CmpOp::Lt, 5)], + }; + assert!(can_match(&p, &s)); + // x > 100 OR x > 200 -> both impossible -> prune + let p2 = Pred::Or { + preds: vec![cmp("x", CmpOp::Gt, 100), cmp("x", CmpOp::Gt, 200)], + }; + assert!(!can_match(&p2, &s)); + } + + #[test] + fn not_and_unknown_keep() { + let s = stats(&[("x", cs(0, 10, 0, 5))]); + assert!(can_match( + &Pred::Not { + pred: Box::new(cmp("x", CmpOp::Gt, 100)) + }, + &s + )); + assert!(can_match(&Pred::Unknown, &s)); + } + + // ---- JSON round-trip of the wire format ---- + #[test] + fn parses_wire_json() { + let j = r#"{"t":"and","preds":[ + {"t":"cmp","col":"id","op":"ge","value":{"vt":"int","v":3000}}, + {"t":"cmp","col":"x","op":"lt","value":{"vt":"float","v":1.5}}, + {"t":"is_not_null","col":"id"}, + {"t":"in","col":"g","values":[{"vt":"str","v":"a"}],"negated":false} + ]}"#; + let p = Pred::from_json(j); + // sanity: with id in [0,999] the id>=3000 conjunct prunes. + let s = stats(&[ + ("id", cs(0, 999, 0, 1000)), + ("x", cs(0, 0, 0, 1000)), + ("g", cs(0, 0, 0, 1000)), + ]); + assert!(!can_match(&p, &s)); + } + + #[test] + fn malformed_json_becomes_keep_all() { + assert!(matches!(Pred::from_json("not json"), Pred::Unknown)); + assert!(matches!(Pred::from_json(r#"{"t":"bogus"}"#), Pred::Unknown)); + } +} diff --git a/python/ray/data/_internal/datasource_v2/native_metadata.py b/python/ray/data/_internal/datasource_v2/native_metadata.py new file mode 100644 index 000000000000..2e99ec267423 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/native_metadata.py @@ -0,0 +1,100 @@ +"""Shared helpers for reading Parquet footers through the arrow-rs native crate. + +Both the read path (``ArrowRsParquetFileReader``) and the listing-stage chunker +(``ParquetFileChunker``) need to read a file's footer via the native crate so a +supported file's footer is read by arrow-rs *end to end* — no PyArrow footer read +for Local/S3 files when ``DataContext.use_arrow_rs_parquet_reader`` is on. This +module holds the logic they share (filesystem eligibility, S3 config bridging, +and the actual ``read_metadata`` call) so neither layer imports the other. +""" + +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + import pyarrow as pa + from pyarrow.fs import FileSystem + + +def native_metadata_supported_filesystem( + filesystem: Optional["FileSystem"], +) -> bool: + """Whether the crate's ``read_metadata`` can read footers on this filesystem. + + The crate's ``object_store`` backend is compiled with the local and AWS + features only, so it can footer-read local files and S3 objects. ``None`` + means the caller will use the default local filesystem. Any other + filesystem (GCS, Azure, HDFS, an fsspec wrapper) must stay on PyArrow. + """ + from pyarrow.fs import LocalFileSystem, S3FileSystem + + return filesystem is None or isinstance(filesystem, (LocalFileSystem, S3FileSystem)) + + +def s3_config(fs: "pa.fs.S3FileSystem") -> dict: + """Recover the full S3 connection config from a pyarrow ``S3FileSystem`` so + the native crate connects *identically* — same endpoint, credentials, region, + addressing style — instead of rebuilding a default client from the ambient env + (which would silently ignore an explicit endpoint override or static creds and + break MinIO / moto / custom-endpoint / credentialed buckets). + + pyarrow round-trips the whole config through ``__reduce__`` (verified to include + ``secret_key``/``session_token``/``endpoint_override``/``scheme`` across the + pyarrow versions Ray supports), so that is the source of truth. Empty strings + (pyarrow's "unset" sentinel) are normalized to ``None``. + """ + try: + opts = fs.__reduce__()[1][0] + except Exception: + opts = {} + + def _val(key): + v = opts.get(key) + return v if v else None + + endpoint = _val("endpoint_override") + # object_store refuses plain-HTTP endpoints unless explicitly allowed + # (moto / MinIO are http). pyarrow's `scheme` defaults to "https" even when + # the endpoint override is an http:// URL, so trust the endpoint URL first. + allow_http = (str(endpoint).startswith("http://")) or opts.get("scheme") == "http" + + return { + "region": _val("region") or "us-east-1", + "anonymous": bool(opts.get("anonymous", False)), + "endpoint": endpoint, + "access_key_id": _val("access_key"), + "secret_access_key": _val("secret_key"), + "session_token": _val("session_token"), + "allow_http": allow_http, + "virtual_hosted_style": bool(opts.get("force_virtual_addressing", False)), + } + + +def read_native_metadata(path: str, filesystem: Optional["FileSystem"]): + """Read one Parquet file's footer via the native crate. + + Returns the crate's ``ParquetFileMetadata`` pyclass (exposing ``num_rows``, + ``num_row_groups``, ``row_group_num_rows``, ``row_group_byte_sizes``, + ``row_group_compressed_sizes``, and ``__arrow_c_schema__``). Raises on a + missing extension or any footer-read failure — the caller decides whether to + fall back. ``filesystem`` must already be native-eligible (see + :func:`native_metadata_supported_filesystem`). + """ + import ray_data_arrow_rs + from pyarrow.fs import S3FileSystem + + if isinstance(filesystem, S3FileSystem): + bucket, _, key = path.partition("/") + cfg = s3_config(filesystem) + return ray_data_arrow_rs.read_metadata_s3( + bucket, + key, + cfg["region"], + cfg["anonymous"], + endpoint=cfg["endpoint"], + access_key_id=cfg["access_key_id"], + secret_access_key=cfg["secret_access_key"], + session_token=cfg["session_token"], + allow_http=cfg["allow_http"], + virtual_hosted_style=cfg["virtual_hosted_style"], + ) + return ray_data_arrow_rs.read_metadata(path) diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py new file mode 100644 index 000000000000..5e3156b165c6 --- /dev/null +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -0,0 +1,1470 @@ +"""Experimental arrow-rs Parquet reader (prototype). + +Subclasses :class:`ParquetFileReader` and swaps *only* the per-fragment decode +step (:meth:`_iter_fragment_tables`) for the ``ray_data_arrow_rs`` PyO3 +extension (a thin wrapper over the Rust ``parquet``/``arrow`` crates). +Everything above the seam — chunking / row-group fan-out, column projection +resolution, ``path`` / ``row_hash`` synthesis, ``limit`` slicing, block sizing, +per-fragment retry — is inherited unchanged from :class:`FileReader` / +:class:`ParquetFileReader`. + +Selected via ``DataContext.use_arrow_rs_parquet_reader`` (only takes effect when +``use_datasource_v2`` is also set). Switched in +:meth:`ParquetScanner.create_reader`. + +How it reads +------------ +The native extension exposes two entry points, both returning an Arrow +C-stream (consumed zero-copy via ``pa.RecordBatchReader.from_stream``): + +- ``read_row_groups(path, row_groups, columns, batch_size, ...)`` — local files. +- ``read_row_groups_s3(bucket, key, region, anonymous, ...creds..., row_groups, + columns, batch_size, decode_budget_bytes, fetch_window_mb, k, + split_threshold_bytes, prefetch_windows)`` — S3 via the Rust ``object_store`` + crate, using a **windowed** fetch (only ``fetch_window_mb`` of compressed bytes + in flight per stream) so S3 peak RSS is a knob, not a property of the row-group + size. ``prefetch_windows`` pipelines consecutive windows (issue window N+1's GET + while window N decodes) to hide S3 latency without staging the whole row group. + +All of the crate's performance knobs (decode budget, K-split, fetch window, +prefetch depth) are settable per read through ``dataset_kwargs`` under an +``arrow_rs_`` prefix — see the "Tuning knobs" section below the imports. + +Byte-budgeted decode (no reader-side accumulation) +-------------------------------------------------- +The native reader sizes each decode batch *by bytes, not rows*: it reads each +row group's uncompressed size / row count from the footer and picks a row count +so ``rows × bytes_per_row ≈ decode_budget_bytes`` (2 MiB default, +:data:`_ARROW_RS_DECODE_BUDGET_BYTES`). A wide-string group gets few rows/batch, +a numeric group many — both land near the budget, so the decoded working set is +flat across schemas (this is *why* arrow-rs memory doesn't scale with the data +the way PyArrow's whole-row-group materialization does). The ``batch_size`` we +pass is only the upper *clamp*. + +We yield each budget-sized batch straight through — exactly like the base +PyArrow path yields one table per scanner batch (:meth:`FileReader. +_iter_fragment_tables`). Coalescing to ``target_max_block_size`` is done once, +downstream, by the read op's :class:`BlockOutputBuffer`. Accumulating a full +block *here* as well (an earlier prototype did) just stacks a second +block-sized buffer on top of the output buffer's, roughly doubling per-worker +peak RSS relative to PyArrow — so we don't. The decode transient stays bounded +by the byte budget; the single ~128 MiB coalesce buffer lives downstream, shared +with the PyArrow path. + +Prototype limitations (documented, not hidden) +---------------------------------------------- +- Predicate handling prunes at row-group granularity *natively*: the pushed + Ray ``Expr`` is lowered to a small JSON IR (:func:`_predicate_to_ir`) and + handed to the crate, which drops row groups whose footer statistics prove no + row can match (``predicate.rs``) before fetching or decoding them. This + replaces PyArrow's ``fragment.subset(filter=...)``. Pruning is conservative + (a missing column / absent stats / uncomparable type keeps the group), so it + can only avoid IO/decode, never change results. *Row-level* filtering is then + applied post-decode in Python via PyArrow (the final authority) — the crate + has no in-decode ``RowFilter`` yet, so rows inside a surviving row group are + decoded before being dropped. +- The native path covers local **and S3** files whose columns the crate + decodes byte-identically to PyArrow: flat types, ``dictionary``, ``map``, + and ``extension`` types (registered like Ray's tensor types or not — the + crate passes the embedded arrow-schema field metadata straight through FFI, + so pyarrow reconstructs them exactly as it would on its own read path), plus + struct / list / map nesting of all those to any depth. Where the crate's + decode *differs* from what the pyarrow scanner would output but the + difference is mechanical, the planned ``read()`` stays native and realigns + post-decode via a per-file :class:`_ColumnAlignment`: schema-evolution + columns are null-filled, per-file type drift is cast to the unified schema, + INT96 hint units are upcast to pyarrow's default ns (but a file decoding + INT96 under ``coerce_int96_timestamp_unit`` falls back — decode-time + coercion floors where a cast truncates, splitting on pre-1970 values), and + forced ``dictionary_columns`` reads are dictionary-cast. An empty projection + with no predicate (count-style scan) decodes nothing at all — footer row + counts answer it (:class:`_NativeCountFragment`). +- Still gated to PyArrow: non-local/S3 filesystems, Parquet-format kwargs + outside the native allowlist (anything not I/O-only, not reproduced by the + alignment, and not footer-verified — e.g. decryption, an explicit + ``page_checksum_verification=False``, or ``binary_type`` / ``list_type`` + without a pinned dataset schema; see + :meth:`ArrowRsParquetFileReader._blocking_format_kwargs`; the thrift footer + limits stay native via a metadata-only pyarrow probe, + :meth:`_verify_footer_limits`), extension-typed + schema drift, and tz-carrying / nested INT96 oddities. There is no per-type + gate: every type Parquet can encode decodes byte-identically through the + crate, and Arrow's in-memory-only types (``union``, ``list_view``, …) cannot + appear in a Parquet footer at all. (Nested-column + *projection* via dotted names is NOT a gate: V2 discards dotted names in + ``FileReader._split_columns`` before any reader sees them — both paths + silently drop the column, and a flat column literally named ``"a.b"`` + decodes natively; see ``test_dotted_nested_projection_native_parity``.) + Everything gated transparently falls back to the + PyArrow reader, so correctness is never at risk — but benchmarks must + confirm the arrow-rs path actually ran (see the + ``RAY_DATA_USE_ARROW_RS_PARQUET_READER`` verification). +""" + +import json +import logging +import os +from functools import cached_property +from typing import TYPE_CHECKING, Any, Dict, Iterator, List, NamedTuple, Optional, Tuple + +import pyarrow as pa +import pyarrow.dataset as pds +from typing_extensions import override + +from ray._common.utils import env_integer +from ray.data._internal.object_extensions.arrow import ( + raise_on_pickle_object_columns, +) +from ray.data._internal.datasource_v2.native_metadata import ( + read_native_metadata as _read_native_metadata_via_crate, +) +from ray.data._internal.datasource_v2.native_metadata import s3_config as _s3_config +from ray.data._internal.datasource_v2.readers.file_reader import ( + _ARROW_DEFAULT_BATCH_SIZE, + _ARROW_SCANNER_BATCH_READAHEAD, +) +from ray.data._internal.datasource_v2.readers.parquet_file_reader import ( + ParquetFileReader, + _estimate_batch_size_from_metadata, +) +from ray.data._internal.util import MiB +from ray.util.annotations import DeveloperAPI + +if TYPE_CHECKING: + import pyarrow.compute as pc # noqa: F401 + + from ray.data._internal.datasource_v2.listing.file_manifest import ( # noqa: F401 + FileManifest, + ) + from ray.data.expressions import Expr # noqa: F401 + +logger = logging.getLogger(__name__) + +# --------------------------------------------------------------------------- +# Tuning knobs +# --------------------------------------------------------------------------- +# Every knob below is settable *per read* via ``dataset_kwargs`` — the same +# channel PyArrow's own I/O-tuning kwargs (``pre_buffer``, ``buffer_size``, +# ...) travel — under an ``arrow_rs_`` prefix: +# +# ray.data.read_parquet( +# path, dataset_kwargs={"arrow_rs_fetch_window_mb": 64, "arrow_rs_k": 4} +# ) +# +# Precedence: ``dataset_kwargs`` value > ``RAY_DATA_ARROW_RS_*`` env var > +# built-in default. The env vars remain the cluster-wide lever (benchmark +# sweeps set them per worker); the kwargs are the per-read override. +# +# The PyArrow reader ignores the ``arrow_rs_*`` keys — they're popped out of +# the format kwargs in ``ParquetFileReader.__init__`` before PyArrow can see +# them — exactly as this reader ignores PyArrow's I/O-only kwargs +# (:data:`_FORMAT_KWARGS_PERF_ONLY`). So a call carrying either family of +# perf knobs stays valid whichever reader ``use_arrow_rs_parquet_reader`` +# selects. Resolution + validation: :meth:`ArrowRsParquetFileReader._tuning`. + +# Knob ``arrow_rs_decode_budget_bytes`` — crate arg ``decode_budget_bytes``. +# Byte budget for a single arrow-rs decode batch. Sizing decode batches by +# bytes (not a fixed row count) keeps the transient working set flat across +# schemas: a wide file gets few rows/batch, a narrow file gets many. Kept far +# below ``target_block_size`` so the decode transient is bounded while output +# blocks are still coalesced to the normal Ray block size. Default 2 MiB: the +# standalone benchmark found budget is the *floor* knob (it moves peak only ~12 MB +# across its range; the S3 fetch window is the real lever), and 2 MiB is the lowest +# that holds throughput — so we take the smaller working set. Swept on the Linux/S3 +# run to confirm it holds under real integration (Agents.md §7.1). +# Tuning: raise toward 8–32 MiB only if per-batch overhead shows up on very +# wide/stringy schemas; lowering below 2 MiB buys ~no memory (the fetch +# window / block buffer dominate peak) and costs throughput. +_ARROW_RS_DECODE_BUDGET_BYTES = env_integer( + "RAY_DATA_ARROW_RS_DECODE_BUDGET_BYTES", 2 * MiB +) + +# Floor on the estimated decode batch size (rows), so a very wide schema can't +# collapse the batch to a handful of rows and starve throughput. +_ARROW_RS_MIN_DECODE_BATCH_ROWS = 2048 + +# Knob ``arrow_rs_k`` — crate arg ``k``. +# Intra-fragment parallelism: when a fragment is a *single* row group larger than +# the block-size target (the lone-big-fragment case Ray's thread pool can't split), +# the native reader decodes it in ``K`` parallel row-range workers and merges them +# back in order. Every other layout (multiple / small row groups) uses K=1 because +# Ray's fragment thread pool already parallelizes those — so crate-K and Ray's pool +# never multiply. +# +# Default K=1: locally, K-split costs memory (each range holds its own decode +# transient) for ~no speed, since there is no network latency to hide (benchmarks: +# Agents.md §5.1, §6.3). K>1 is opt-in and is reserved for the S3 phase, where +# concurrent range GETs hide request latency. +# Tuning: try 2–8 for big single-row-group files on S3 when read throughput is +# latency-bound; expect per-task peak memory to scale ~linearly with K (each +# range worker holds its own fetch window + decode transient). Keep 1 for +# local reads and many-small-row-group layouts. +_ARROW_RS_K = env_integer("RAY_DATA_ARROW_RS_K", 1) + +# Knob ``arrow_rs_split_threshold_bytes`` — crate arg ``split_threshold_bytes``. +# A lone row group is only K-split when its uncompressed size exceeds this +# threshold (smaller groups decode sequentially — splitting them buys nothing +# and costs merge overhead). When the knob is unset the reader uses its +# ``target_block_size`` (the Ray block-size target), falling back to the +# default below when it has neither. +# Tuning: rarely needed — lower it (e.g. to 0) only to force the K-split on +# for testing, or raise it to keep K-splitting away from mid-size groups. +_ARROW_RS_DEFAULT_SPLIT_THRESHOLD_BYTES = 128 * MiB + +# Knob ``arrow_rs_fetch_window_mb`` — crate arg ``fetch_window_mb``. +# S3 fetch window (MiB of *compressed* bytes in flight per stream). This is the +# memory knob for the S3 path: the native reader slices each row group's rows into +# windows sized so only ~this many compressed bytes are fetched+buffered before +# decode, so peak RSS is `≈ fetch_window + decode_budget` — flat regardless of +# row-group size, instead of PyArrow's whole-row-group pre-buffer. 0 = no window +# cap (fetch the whole range at once). Swept on the Linux/S3 run (Agents.md §7.1). +# Tuning: this is the primary memory<->throughput trade on S3. Raise (64+) to +# amortize request latency over fewer, larger GETs when memory is plentiful; +# lower toward 4 to cap per-task RSS on memory-tight clusters. No effect on +# local reads. +_ARROW_RS_FETCH_WINDOW_MB = env_integer("RAY_DATA_ARROW_RS_FETCH_WINDOW_MB", 16) + +# Knob ``arrow_rs_prefetch_windows`` — crate arg ``prefetch_windows``. +# S3 window prefetch depth: how many consecutive fetch windows the native reader +# keeps in flight per stream. With depth 2 the GET for window N+1 is issued while +# window N decodes, so S3 first-byte latency is hidden behind decode instead of +# paid serially between windows — the memory-bounded analog of pyarrow's +# whole-fragment pre_buffer (peak stays `≈ prefetch_windows * fetch_window_mb` +# compressed in flight, not the whole row group). 1 = strictly serial windows +# (no prefetch). Only affects the S3 path (local reads have no fetch latency to +# hide); reserved for and swept on the Linux/S3 run (Agents.md §7.1). +# Tuning: 2 already overlaps fetch with decode; depth >2 only helps when a +# single window decodes faster than it fetches (very high-latency stores) and +# multiplies the compressed bytes held in flight. Drop to 1 to minimize +# memory at the cost of exposing S3 latency between windows. +_ARROW_RS_PREFETCH_WINDOWS = env_integer("RAY_DATA_ARROW_RS_PREFETCH_WINDOWS", 2) + +# Parquet-format kwargs (``pds.ParquetFileFormat``) that tune PyArrow's I/O +# strategy only — they cannot change decoded bytes, so the native path (which +# has its own I/O strategy: byte-budgeted streaming + bounded fetch window) may +# safely ignore them. Every other format kwarg either has a native equivalent +# planned per file (see ``_FORMAT_KWARGS_ALIGNED``) or forces a PyArrow +# fallback (see ``ArrowRsParquetFileReader._blocking_format_kwargs``). +_FORMAT_KWARGS_PERF_ONLY = frozenset( + {"pre_buffer", "buffer_size", "use_buffered_stream", "cache_options"} +) +# Parquet-format kwargs whose *semantic* effect the planned native read +# reproduces post-decode via ``_ColumnAlignment`` casts. Membership here means +# the kwarg never blocks the reader; the per-file plan decides. For +# ``coerce_int96_timestamp_unit`` the plan is a *fallback* whenever the file +# actually decodes an INT96 column: pyarrow's decode-time coercion floors +# (parquet types.h divides the unsigned nanos-of-day) while a post-decode cast +# truncates toward zero — off by one unit on every pre-1970 value, so the cast +# cannot reproduce it. Files without INT96 stay native (the kwarg is inert). +_FORMAT_KWARGS_ALIGNED = frozenset( + {"coerce_int96_timestamp_unit", "dictionary_columns"} +) +# Parquet-format kwargs the planned native read enforces via a metadata-only +# pyarrow footer probe (:meth:`ArrowRsParquetFileReader._verify_footer_limits`): +# the thrift limits only decide whether a file's *footer* is accepted or +# rejected — they can never change decoded bytes — so running pyarrow's own +# footer parse with the limits applied reproduces the accept/reject behavior +# (and the raised ``OSError``) exactly, after which the decode stays native. +_FORMAT_KWARGS_FOOTER_VERIFIED = frozenset( + {"thrift_string_size_limit", "thrift_container_size_limit"} +) +# Schema-shaping kwargs (pyarrow 21+): on a file *without* an embedded arrow +# schema they change decoded types (``binary_type=large_binary`` flips +# binary→large_binary AND string→large_string; ``list_type=LargeListType`` +# flips list→large_list); on embedded-schema files (all Ray-written files) +# they are inert. On the V2 pipeline the pinned unified schema — computed by +# the listing via ``pq.read_schema``, which is blind to these kwargs — is the +# final authority: the base reader's pinned-schema cast silently *undoes* +# them (verified empirically, pyarrow 24). So with a pinned schema, parity is +# simply "output the pinned schema", which the native path's per-file +# :class:`_ColumnAlignment` drift casts already guarantee — admit natively. +# WITHOUT a pinned schema the kwargs do change the output and the crate +# doesn't reproduce them — fall back. See +# :meth:`ArrowRsParquetFileReader._blocking_format_kwargs`. +_FORMAT_KWARGS_SCHEMA_SHAPED = frozenset({"binary_type", "list_type"}) + + +class _ArrowRsTuning(NamedTuple): + """Resolved values of the tuning knobs above for one reader instance + (kwarg > env var > default; see :meth:`ArrowRsParquetFileReader._tuning`). + ``split_threshold_bytes=None`` means "derive from ``target_block_size``" + at the call site.""" + + decode_budget_bytes: int + k: int + split_threshold_bytes: Optional[int] + fetch_window_mb: int + prefetch_windows: int + + +# There is deliberately NO per-type support gate: every type Parquet can store +# (flat types, ``dictionary``, ``map``, ``extension`` — registered like Ray's +# tensor types or not — plus struct / list / map nesting of all those to any +# depth) decodes byte-identically to PyArrow through the crate's C-data +# interface (verified in ``test_extension_types_native_parity`` and the type +# probes behind it). The Arrow types the crate has NOT been verified against +# (``union``, ``list_view`` / ``large_list_view``, ``run_end_encoded``, …) are +# in-memory-only types with no Parquet encoding — PyArrow itself refuses to +# write them ("Unhandled type for Arrow to Parquet schema conversion") — so a +# schema read from a Parquet footer can never contain one, and a gate on them +# was unreachable dead code (removed 2026-07-28). + + +def _pyarrow_fragment_int96_roots(fragment: "pds.ParquetFileFragment") -> set: + """Root (top-level) column names backing an INT96 leaf in a PyArrow Parquet + fragment, read from the *parquet* schema (``fragment.metadata.schema``). + + The fragment's ``physical_schema`` is PyArrow's post-coercion Arrow schema, in + which INT96 already shows up as ``timestamp[ns]`` — so it can't reveal which + columns were INT96 on disk. The parquet schema descriptor can, via each leaf + column's ``physical_type``. Used by the conservative re-gate so an INT96 file + is never handed to the crate through the per-fragment path.""" + roots: set = set() + try: + schema = fragment.metadata.schema + for i in range(len(schema)): + col = schema.column(i) + if col.physical_type == "INT96": + roots.add(col.path.split(".", 1)[0]) + except Exception: # noqa: BLE001 - missing/odd metadata => treat as none + pass + return roots + + +def _raise_if_strict_no_fallback(reason: str) -> None: + """Correctness-harness guard: when ``RAY_DATA_ARROW_RS_STRICT`` is set (to + anything but ``0``/``false``), any decision to serve part of a read through + the PyArrow fallback raises instead of proceeding. A large-scale validation + run flips this on to *guarantee* every byte it checked came off the native + arrow-rs path — a silent fallback would make the run validate PyArrow. + Read per call (not at import) so a harness can toggle it within a session. + Inert by default: production reads never set the variable. + """ + if os.environ.get("RAY_DATA_ARROW_RS_STRICT", "").lower() in ("", "0", "false"): + return + raise RuntimeError( + "RAY_DATA_ARROW_RS_STRICT is set, but this read requires the PyArrow " + f"fallback: {reason}. Strict mode exists for validation harnesses that " + "must prove the native arrow-rs path ran; unset the env var to allow " + "the fallback." + ) + + +def _trace_reader_path(supported: bool) -> None: + """Benchmark instrumentation (inert unless ``RAY_DATA_ARROW_RS_PATH_TRACE`` + names a directory): append ``native``/``fallback`` for each fragment to a + per-pid file so a harness can assert which path the support gate chose. Never + raises into the read path. + """ + trace_dir = os.environ.get("RAY_DATA_ARROW_RS_PATH_TRACE") + if not trace_dir: + return + try: + import socket + + # Namespace by hostname so nodes writing to a shared trace dir (multi-node + # verification) don't collide on pid; the harness's ``path_*.log`` glob + # still matches. Single-node is unaffected. + line = "native\n" if supported else "fallback\n" + fname = f"path_{socket.gethostname()}_{os.getpid()}.log" + with open(os.path.join(trace_dir, fname), "a") as fh: + fh.write(line) + except Exception: + pass + + +# --------------------------------------------------------------------------- +# Predicate lowering: Ray Expr -> native pruning IR (predicate pushdown, part 1) +# --------------------------------------------------------------------------- +# The native crate does statistics-based row-group pruning from a small JSON IR +# (parsed by ``predicate.rs``). We lower the *pushed* Ray ``Expr`` predicate into +# that IR here rather than translating the PyArrow expression, because the Ray +# AST (ColumnExpr / LiteralExpr / BinaryExpr / UnaryExpr) is directly +# introspectable. +# +# The lowering is **total**: any node it can't represent becomes ``{"t": +# "unknown"}``, which the crate treats as "keep this row group". So a partially +# understood predicate like ``a > 5 AND some_udf(b)`` still lowers to +# ``And[cmp(a>5), unknown]`` and prunes soundly on the ``a > 5`` conjunct instead +# of giving up. Pruning is conservative on the Rust side (a group is dropped only +# when provably empty), and the reader re-applies the full predicate post-decode, +# so this only ever avoids IO/decode — it can never change which rows are +# returned. + +# Ray comparison Operation -> IR op string. +_CMP_OP_TO_IR = { + "gt": "gt", + "lt": "lt", + "ge": "ge", + "le": "le", + "eq": "eq", + "ne": "ne", +} +# When the column is on the *right* of a comparison (``5 < col``), flip the op so +# the IR always reads ``col OP literal``. +_CMP_OP_FLIP = {"gt": "lt", "lt": "gt", "ge": "le", "le": "ge", "eq": "eq", "ne": "ne"} + +_IR_UNKNOWN: Dict[str, Any] = {"t": "unknown"} + + +def _literal_to_ir_value(value: Any) -> Optional[Dict[str, Any]]: + """Lower a Python literal to a tagged IR value, or None if the crate can't + order it for pruning (bytes, datetimes, decimals, ...), which makes the + enclosing atom ``unknown``. ``bool`` is checked before ``int`` because + ``bool`` is an ``int`` subclass.""" + if isinstance(value, bool): + return {"vt": "bool", "v": value} + if isinstance(value, int): + return {"vt": "int", "v": value} + if isinstance(value, float): + return {"vt": "float", "v": value} + if isinstance(value, str): + return {"vt": "str", "v": value} + if value is None: + return {"vt": "null"} + return None + + +def _predicate_to_ir(expr: "Expr") -> Dict[str, Any]: + """Lower a Ray Data predicate ``Expr`` to the native pruning IR (see above). + + Total by construction: unrepresentable subtrees become ``_IR_UNKNOWN``. + """ + from ray.data.expressions import ( + AliasExpr, + BinaryExpr, + ColumnExpr, + LiteralExpr, + Operation, + UnaryExpr, + ) + + def unwrap(e: "Expr") -> "Expr": + # Aliasing doesn't change the value being compared. + while isinstance(e, AliasExpr): + e = e.expr + return e + + def lower(e: "Expr") -> Dict[str, Any]: + e = unwrap(e) + + if isinstance(e, UnaryExpr): + if e.op == Operation.NOT: + return {"t": "not", "pred": lower(e.operand)} + if e.op in (Operation.IS_NULL, Operation.IS_NOT_NULL): + operand = unwrap(e.operand) + if isinstance(operand, ColumnExpr): + tag = "is_null" if e.op == Operation.IS_NULL else "is_not_null" + return {"t": tag, "col": operand.name} + return _IR_UNKNOWN + + if isinstance(e, BinaryExpr): + if e.op in (Operation.AND, Operation.OR): + tag = "and" if e.op == Operation.AND else "or" + return {"t": tag, "preds": [lower(e.left), lower(e.right)]} + + if e.op in (Operation.IN, Operation.NOT_IN): + col = unwrap(e.left) + rhs = unwrap(e.right) + if isinstance(col, ColumnExpr) and isinstance(rhs, LiteralExpr): + raw = rhs.value + raw = raw if isinstance(raw, list) else [raw] + values = [_literal_to_ir_value(v) for v in raw] + if all(v is not None for v in values): + return { + "t": "in", + "col": col.name, + "values": values, + "negated": e.op == Operation.NOT_IN, + } + return _IR_UNKNOWN + + ir_op = _CMP_OP_TO_IR.get(e.op.value) + if ir_op is not None: + left = unwrap(e.left) + right = unwrap(e.right) + if isinstance(left, ColumnExpr) and isinstance(right, LiteralExpr): + val = _literal_to_ir_value(right.value) + if val is not None: + return {"t": "cmp", "col": left.name, "op": ir_op, "value": val} + elif isinstance(left, LiteralExpr) and isinstance(right, ColumnExpr): + val = _literal_to_ir_value(left.value) + if val is not None: + return { + "t": "cmp", + "col": right.name, + "op": _CMP_OP_FLIP[ir_op], + "value": val, + } + return _IR_UNKNOWN + + return _IR_UNKNOWN + + return lower(expr) + + +def _predicate_json(predicate: "Optional[Expr]") -> Optional[str]: + """Serialize the pushed predicate's pruning IR for the crate, or None when + there's nothing prunable (no predicate, or it lowered entirely to + ``unknown``) so we skip the pushdown argument altogether.""" + if predicate is None: + return None + ir = _predicate_to_ir(predicate) + if ir == _IR_UNKNOWN: + return None + return json.dumps(ir) + + +def _is_extension_type(t: pa.DataType) -> bool: + """Two-way extension detection: ``isinstance`` for registered extensions, + ``extension_name`` for canonical pyarrow extensions (e.g. + ``fixed_shape_tensor``) that aren't ``pa.ExtensionType`` instances on every + pyarrow version.""" + return isinstance(t, pa.ExtensionType) or ( + getattr(t, "extension_name", None) is not None + ) + + +class _ColumnAlignment(NamedTuple): + """Per-file post-decode fixups that make a native decode byte-match what the + pyarrow scanner would have produced for the same file against the unified + dataset schema. Built once per file at plan time + (:meth:`ArrowRsParquetFileReader._plan_column_alignment`), applied to every + decoded batch (:func:`_apply_column_alignment`) *before* the post-decode + filter, so the predicate evaluates against the same types pyarrow's scanner + filters on. + + - ``null_fill``: columns absent from this file (schema evolution) appended + as typed all-null columns — exactly pyarrow's null-fill under a pinned + dataset schema. + - ``casts``: columns whose crate-decoded type differs from the expected + output type (per-file type drift vs the unified schema, INT96 unit + realignment, forced ``dictionary_columns`` decode). The bool is + ``allow_time_truncate``, set only for INT96 unit coercion where pyarrow + itself truncates (``coerce_int96_timestamp_unit``); every other cast is + safe, so lossy data errors loudly — the same outcome pyarrow's own + scanner cast produces. + - ``order``: final column order, or ``None`` to keep the crate's order. + Set only when ``null_fill`` is non-empty (appended columns must land in + read order, matching the scanner's projected-column order). + """ + + null_fill: Tuple[Tuple[str, pa.DataType], ...] + casts: Tuple[Tuple[str, pa.DataType, bool], ...] + order: Optional[Tuple[str, ...]] + + @property + def is_noop(self) -> bool: + return not self.null_fill and not self.casts + + +_NOOP_ALIGNMENT = _ColumnAlignment(null_fill=(), casts=(), order=None) + + +def _apply_column_alignment( + table: pa.Table, alignment: Optional[_ColumnAlignment] +) -> pa.Table: + """Apply a plan-time :class:`_ColumnAlignment` to one decoded batch.""" + if alignment is None or alignment.is_noop: + return table + import pyarrow.compute as pc + + for name, target, allow_time_truncate in alignment.casts: + idx = table.schema.get_field_index(name) + if idx == -1: + continue + column = table.column(idx) + if allow_time_truncate: + column = column.cast( + options=pc.CastOptions(target, allow_time_truncate=True) + ) + else: + column = column.cast(target) # safe: lossy values raise, like pyarrow + table = table.set_column(idx, pa.field(name, target), column) + for name, fill_type in alignment.null_fill: + table = table.append_column( + pa.field(name, fill_type), pa.nulls(table.num_rows, type=fill_type) + ) + if alignment.order is not None: + table = table.select([c for c in alignment.order if c in table.column_names]) + return table + + +class _NativeParquetFragment(NamedTuple): + """A native (pyarrow-free) unit of work for one file's row-group slice. + + The arrow-rs ``read()`` builds these instead of pyarrow ``ParquetFileFragment`` + objects for files the native reader handles, so pyarrow never opens a + supported file. ``row_groups is None`` means "all row groups in the file" + (whole-file read). Exposes ``.path`` so it flows through the same + :meth:`FileReader._dispatch_fragment_reads` threading/retry machinery as a + pyarrow fragment; :meth:`ArrowRsParquetFileReader._iter_fragment_tables` + dispatches on the type. ``alignment`` carries this file's post-decode + fixups (:class:`_ColumnAlignment`), ``None`` when the decode already + matches the expected output. + """ + + path: str + row_groups: Optional[List[int]] + alignment: Optional[_ColumnAlignment] = None + + +class _NativeCountFragment(NamedTuple): + """A zero-decode work unit for an empty projection (count-style scan) with + no predicate: the footer row counts are exact, so the read yields a + zero-column table with the right ``num_rows`` and never touches a data + page. The base pyarrow path instead scans a stub column; + :meth:`FileReader._postprocess`'s stub guard re-adds the row-preserving + stub downstream, identically for both paths.""" + + path: str + num_rows: int + + +@DeveloperAPI +class ArrowRsParquetFileReader(ParquetFileReader): + """Parquet reader that decodes each fragment via the arrow-rs extension. + + See the module docstring for the design. Only :meth:`_iter_fragment_tables`, + :meth:`_resolve_batch_size`, and :meth:`_on_batch_read` are overridden; the + rest of the read pipeline is inherited from :class:`ParquetFileReader`. + """ + + @override + def _resolve_batch_size(self, dataset: pds.Dataset) -> int: + """Size the decode batch to the arrow-rs byte budget, not the block size. + + Priority: explicit ``batch_size`` > byte-budget estimate from row-group + metadata > default. Unlike the base reader this targets + :data:`_ARROW_RS_DECODE_BUDGET_BYTES` (~8 MiB) rather than + ``target_block_size`` (~128 MiB), because each decode batch is yielded + straight through in :meth:`_iter_fragment_tables` (the downstream + ``BlockOutputBuffer`` does the coalescing to the block size). + """ + if self._explicit_batch_size is not None: + return self._explicit_batch_size + + if self._target_block_size is None: + return _ARROW_DEFAULT_BATCH_SIZE + + first_fragment = next(dataset.get_fragments(), None) + if first_fragment is None: + return _ARROW_DEFAULT_BATCH_SIZE + + estimated = _estimate_batch_size_from_metadata( + first_fragment, self._columns, self._tuning.decode_budget_bytes + ) + if estimated is None: + return _ARROW_DEFAULT_BATCH_SIZE + return max(estimated, _ARROW_RS_MIN_DECODE_BATCH_ROWS) + + @override + def _on_batch_read(self, table: pa.Table) -> None: + """No-op: the decode batch size is fixed by the byte budget, so there is + nothing to refine from actual data (unlike the base reader).""" + return None + + @override + def read(self, input_split: "FileManifest") -> "Iterator[pa.Table]": + """Pyarrow-free Parquet read for supported files. + + For files the native reader handles (local/S3, flat + struct/list types, + no schema evolution / dictionary / extension), the footer, row-group + layout, and statistics come from the crate's ``read_metadata`` and decode + from ``read_row_groups`` — pyarrow never opens the file. Files (or whole + splits) the native path can't handle transparently fall back to the base + pyarrow ``read()`` / scanner, so correctness is never at risk. The + format-agnostic finishing (limit, partition/``path``/``row_hash`` + synthesis, projection) is shared with the base reader via + :meth:`_postprocess`. + """ + if len(input_split) == 0: + return + + # Reader-wide ineligibility: unsupported filesystem, or a Parquet-format + # kwarg outside the native allowlist (anything not perf-only, not + # reproduced by the per-file :class:`_ColumnAlignment`, and not + # footer-verified — e.g. decryption, ``binary_type``) — use the base + # pyarrow read() unchanged, which honors every format kwarg. + blocked = self._blocking_format_kwargs(aligned_ok=True) + if not self._filesystem_supported() or blocked: + if blocked: + _raise_if_strict_no_fallback( + f"unsupported parquet format kwargs {sorted(blocked)}" + ) + logger.debug( + "arrow-rs read falling back to pyarrow: unsupported " + "parquet format kwargs %s", + sorted(blocked), + ) + else: + _raise_if_strict_no_fallback( + f"unsupported filesystem {type(self._filesystem).__name__}" + ) + yield from super().read(input_split) + return + + plan = self._plan_native_read(input_split) + if plan is None: + # A file's footer couldn't be read natively (corrupt / unsupported + # footer); fall the whole split back to pyarrow rather than reason + # about a partially-known layout. + _raise_if_strict_no_fallback( + "a file's footer could not be read via the native crate" + ) + yield from super().read(input_split) + return + + fragments_with_offsets, columns_to_synthesize, scanner_kwargs = plan + triples = self._dispatch_fragment_reads(fragments_with_offsets, scanner_kwargs) + yield from self._postprocess(triples, columns_to_synthesize) + + def _verify_footer_limits(self, paths: List[str]) -> None: + """Enforce ``thrift_string_size_limit`` / ``thrift_container_size_limit`` + on the planned native read with a metadata-only pyarrow footer parse. + + The limits guard *footer deserialization* (accept vs reject a file's + metadata) and can never change decoded bytes, so running pyarrow's own + thrift parser with the limits applied reproduces the base path's + accept/reject behavior — and the exact ``OSError`` it raises — while + the data decode stays native. This is the one deliberate exception to + "pyarrow never opens a supported file": a footer-only read (a few KB), + and only when the user actually set a limit. A raised error is the + *correct* outcome, not a fallback trigger — the base path would raise + the same error, so we let it propagate.""" + limits = { + key: self._parquet_format_kwargs[key] + for key in _FORMAT_KWARGS_FOOTER_VERIFIED + if self._parquet_format_kwargs.get(key) is not None + } + if not limits: + return + import pyarrow.parquet as pq + from pyarrow.fs import LocalFileSystem + + fs = self._filesystem or LocalFileSystem() + for path in paths: + with fs.open_input_file(path) as source: + # Constructing ParquetFile parses the footer under the limits; + # a violation raises pyarrow's usual thrift OSError. + pq.ParquetFile(source, **limits) + + def _read_native_metadata( + self, path: str + ) -> Optional[Tuple[pa.Schema, List[int], List[str]]]: + """Read one file's footer via the crate: ``(arrow schema, per-row-group + row counts, int96 root columns)``, or ``None`` if the native footer read + fails (caller then falls the whole split back to pyarrow). Does *not* + swallow a missing extension — :meth:`_import_extension` raises that + loudly. The int96 list lets :meth:`_plan_column_alignment` realign the + crate's decoded unit for those columns to what PyArrow produces.""" + # Surfaces a missing extension loudly (import inside the crate call); + # any *footer-read* failure below becomes a whole-split pyarrow fallback. + self._import_extension() + + try: + md = _read_native_metadata_via_crate(path, self._filesystem) + except Exception as e: # noqa: BLE001 - any footer failure => fallback + logger.debug("arrow-rs native metadata read failed for %s: %s", path, e) + return None + return pa.schema(md), list(md.row_group_num_rows), list(md.int96_columns) + + def _plan_native_read( + self, manifest: "FileManifest" + ) -> Optional[Tuple[List[Tuple[Any, int]], Optional[set], dict]]: + """Plan a native read: footer-read every file, decide native vs pyarrow + per file, and build the ordered ``[(fragment, file_row_offset)]`` list + plus the shared column split and scanner kwargs. Returns ``None`` to + signal a whole-split pyarrow fallback (some file's footer read failed).""" + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.chunkers.parquet_file_chunking_utils import ( # noqa: E501 + _fragments_from_chunk_metadata, + ) + + unique_paths = list(dict.fromkeys(list(manifest.paths))) + + # Thrift footer limits, when set, decide whether each file is accepted + # or REJECTED — enforce them first with pyarrow's own parser so a + # too-large footer raises the identical OSError the base path would + # raise (parity-of-error), before any native work happens. + self._verify_footer_limits(unique_paths) + + native_md: Dict[str, Tuple[pa.Schema, List[int], List[str]]] = {} + for path in unique_paths: + md = self._read_native_metadata(path) + if md is None: + return None # whole-split pyarrow fallback + native_md[path] = md + + # Column split, mirroring the base reader's ``dataset.schema.names``: + # with a pinned unified schema, ``pds.dataset(schema=...)`` reports + # exactly that schema — so a unified column absent from every file in + # this split still counts as on-disk (and gets null-filled per file by + # the alignment), instead of being silently dropped. Without a unified + # schema, fall back to the union of the files' footer schemas. + # Partition / path / row_hash columns aren't on disk anywhere and so + # land in the synthesize set either way. + if self._file_dataset_schema is not None: + on_disk_names = set(self._file_dataset_schema.names) + else: + on_disk_names = set() + for schema, _, _ in native_md.values(): + on_disk_names.update(schema.names) + columns_to_read_from_file, columns_to_synthesize = self._split_columns( + on_disk_names + ) + + scanner_kwargs = { + "columns": columns_to_read_from_file, + "filter": ( + self._predicate.to_pyarrow() if self._predicate is not None else None + ), + # The native decode re-derives its per-batch size by byte budget from + # the footer, so this is only an upper clamp; pyarrow-fallback + # fragments (nested/dictionary/extension) further clamp it themselves. + "batch_size": self._explicit_batch_size or _ARROW_DEFAULT_BATCH_SIZE, + "batch_readahead": _ARROW_SCANNER_BATCH_READAHEAD, + } + scanner_kwargs.update(self._arrow_scanner_kwargs()) + + read_columns = self._resolve_read_columns_for(scanner_kwargs) + + # Empty projection with no predicate (count-style scan): zero decode — + # the footer row counts already read above are exact, so emit + # count fragments for every file and never touch a data page. (With a + # predicate the count depends on the data; that case falls through to + # the per-file verdict below, which rejects empty projections.) + if ( + read_columns is not None + and len(read_columns) == 0 + and scanner_kwargs["filter"] is None + ): + count_fragments: List[Tuple[Any, int]] = [] + for path, chunk_metadata in zip( + manifest.paths, manifest.file_chunk_metadatas + ): + count_fragments.extend( + self._native_count_fragments( + path, chunk_metadata, native_md[path][1] + ) + ) + return count_fragments, columns_to_synthesize, scanner_kwargs + + # Per-file verdict: native decode (with an optional post-decode + # alignment plan) vs pyarrow fallback. + alignment_by_path: Dict[str, Optional[_ColumnAlignment]] = {} + for path, (schema, _, int96_cols) in native_md.items(): + alignment = self._plan_column_alignment(schema, read_columns, int96_cols) + if alignment is not None: + alignment_by_path[path] = None if alignment.is_noop else alignment + native_paths = set(alignment_by_path) + fallback_paths = [p for p in unique_paths if p not in native_paths] + if fallback_paths: + _raise_if_strict_no_fallback( + "no native column-alignment plan for file(s) " + f"{fallback_paths} (unplannable schema drift or unsupported " + "read-time coercion)" + ) + + # Build pyarrow fragments for the fallback files only (pyarrow never opens + # native files). One dataset over the fallback paths; the per-file fan-out + # reuses the base chunker helper so offsets / row-group slicing match the + # base path exactly. + fallback_fragment_by_path: dict = {} + if fallback_paths: + fb_dataset = pds.dataset( + source=fallback_paths, + format=self._make_format(), + filesystem=self._filesystem or LocalFileSystem(), + schema=self._file_dataset_schema, + ignore_prefixes=self._ignore_prefixes, + ) + fallback_fragment_by_path = { + frag.path: frag for frag in fb_dataset.get_fragments() + } + + fragments_with_offsets: List[Tuple[Any, int]] = [] + for path, chunk_metadata in zip(manifest.paths, manifest.file_chunk_metadatas): + if path in native_paths: + fragments_with_offsets.extend( + self._native_fragments_for_file( + path, + chunk_metadata, + native_md[path][1], + alignment_by_path[path], + ) + ) + else: + fragment = fallback_fragment_by_path[path] + if chunk_metadata is None: + fragments_with_offsets.append((fragment, 0)) + else: + fragments_with_offsets.extend( + _fragments_from_chunk_metadata(fragment, chunk_metadata) + ) + + return fragments_with_offsets, columns_to_synthesize, scanner_kwargs + + @staticmethod + def _native_fragments_for_file( + path: str, + chunk_metadata: Optional[dict], + row_group_num_rows: List[int], + alignment: Optional[_ColumnAlignment] = None, + ) -> List[Tuple[_NativeParquetFragment, int]]: + """Build native fragments for one file, matching the base reader's + granularity so ``row_hash`` offsets are identical: + + - whole file (``chunk_metadata is None``) → one fragment over *all* row + groups at offset 0 (the base emits one whole-file fragment); + - a chunk → one fragment *per row group* in ``[start, end)``, each seeded + with the pre-filter file row offset of that group's first row (mirrors + :func:`_fragments_from_chunk_metadata`), so post-filter accumulation + within a group starts from the right position. + + ``alignment`` is the file's post-decode fixup plan, embedded in every + fragment so it survives the threaded fragment dispatch. + """ + if chunk_metadata is None: + return [(_NativeParquetFragment(path, None, alignment), 0)] + + total = len(row_group_num_rows) + start = min(chunk_metadata["row_group_start"], total) + end = min(chunk_metadata["row_group_end"], total) + fragments: List[Tuple[_NativeParquetFragment, int]] = [] + file_row_offset = sum(row_group_num_rows[:start]) + for rg in range(start, end): + fragments.append( + (_NativeParquetFragment(path, [rg], alignment), file_row_offset) + ) + file_row_offset += row_group_num_rows[rg] + return fragments + + @staticmethod + def _native_count_fragments( + path: str, + chunk_metadata: Optional[dict], + row_group_num_rows: List[int], + ) -> List[Tuple[_NativeCountFragment, int]]: + """Build zero-decode count fragments for one file (empty projection, no + predicate), at the same granularity/offsets as + :meth:`_native_fragments_for_file` so ``limit`` slicing and any + synthesized columns (``path``, partitions) behave identically.""" + if chunk_metadata is None: + return [(_NativeCountFragment(path, sum(row_group_num_rows)), 0)] + + total = len(row_group_num_rows) + start = min(chunk_metadata["row_group_start"], total) + end = min(chunk_metadata["row_group_end"], total) + fragments: List[Tuple[_NativeCountFragment, int]] = [] + file_row_offset = sum(row_group_num_rows[:start]) + for rg in range(start, end): + fragments.append( + (_NativeCountFragment(path, row_group_num_rows[rg]), file_row_offset) + ) + file_row_offset += row_group_num_rows[rg] + return fragments + + @cached_property + def _tuning(self) -> _ArrowRsTuning: + """Resolve the arrow-rs tuning knobs for this reader. + + Each knob comes from the ``arrow_rs_*`` key in ``dataset_kwargs`` when + present (popped into ``self._arrow_rs_tuning`` by + ``ParquetFileReader.__init__``), else from its ``RAY_DATA_ARROW_RS_*`` + env var, else the built-in default — see the "Tuning knobs" section at + the top of this module for what each knob does and how to tune it. A + ``None`` value means "use the default", consistent with the + format-kwarg convention. Invalid values raise loudly (a mis-set perf + knob must not silently degrade a benchmark or production read). + """ + + def resolve(key: str, default: Optional[int], minimum: int) -> Optional[int]: + value = self._arrow_rs_tuning.get(key) + if value is None: + return default + if isinstance(value, bool) or not isinstance(value, int): + raise ValueError( + f"'{key}' in 'dataset_kwargs' must be an int, got {value!r}" + ) + if value < minimum: + raise ValueError( + f"'{key}' in 'dataset_kwargs' must be >= {minimum}, got {value}" + ) + return value + + return _ArrowRsTuning( + decode_budget_bytes=resolve( + "arrow_rs_decode_budget_bytes", _ARROW_RS_DECODE_BUDGET_BYTES, 1 + ), + k=resolve("arrow_rs_k", _ARROW_RS_K, 1), + split_threshold_bytes=resolve("arrow_rs_split_threshold_bytes", None, 0), + fetch_window_mb=resolve( + "arrow_rs_fetch_window_mb", _ARROW_RS_FETCH_WINDOW_MB, 0 + ), + prefetch_windows=resolve( + "arrow_rs_prefetch_windows", _ARROW_RS_PREFETCH_WINDOWS, 1 + ), + ) + + @cached_property + def _pushdown_predicate_json(self) -> Optional[str]: + """The pushed predicate lowered to the native pruning IR (JSON), or + ``None`` when there's nothing prunable. Depends only on + ``self._predicate``, so it's computed once and reused for every + fragment. See :func:`_predicate_to_ir` for the (total, conservative) + lowering and the soundness argument.""" + return _predicate_json(self._predicate) + + def _filesystem_supported(self) -> bool: + """Whether the native crate can read from this filesystem at all. + Local and S3 are wired in `_iter_fragment_tables` / the native `read()` + (S3 uses the windowed, byte-budgeted native path). Any other + filesystem (GCS, ABFS, HTTP, …) falls back to PyArrow.""" + from pyarrow.fs import LocalFileSystem, S3FileSystem + + return isinstance(self._filesystem, (LocalFileSystem, S3FileSystem)) + + def _blocking_format_kwargs(self, aligned_ok: bool) -> Dict[str, Any]: + """Parquet-format kwargs (the ``dataset_kwargs`` payload spread into + ``pds.ParquetFileFormat``) that the native path cannot honor — a + non-empty result forces a PyArrow fallback, which honors them all. + + The audit rule is an explicit ALLOWLIST, so a format kwarg added by a + future pyarrow version is *unsupported until proven supported* — never + silently ignored (e.g. pyarrow 21+'s ``binary_type`` / ``list_type`` / + ``arrow_extensions_enabled`` change the decoded schema, and + ``thrift_string_size_limit`` changes which files are *rejected*, so + ignoring any of them would diverge from the PyArrow paths): + + - :data:`_FORMAT_KWARGS_PERF_ONLY` (``pre_buffer``, ``buffer_size``, + ``use_buffered_stream``, ``cache_options``) tune PyArrow's I/O + strategy only and cannot change decoded bytes; the crate has its own + I/O strategy (byte-budgeted streaming + fetch window), so they are + safely ignorable natively. + - :data:`_FORMAT_KWARGS_ALIGNED` (``coerce_int96_timestamp_unit``, + ``dictionary_columns``) are reproduced by the *planned* path via + :class:`_ColumnAlignment`, and + :data:`_FORMAT_KWARGS_FOOTER_VERIFIED` (the thrift limits) are + enforced by the planned path's pyarrow footer probe + (:meth:`_verify_footer_limits`) — both admitted only with + ``aligned_ok=True``. The per-fragment re-gate can plan neither an + alignment nor a probe (see :meth:`_reader_level_supported`), so + there they block (``aligned_ok=False``). + - :data:`_FORMAT_KWARGS_SCHEMA_SHAPED` (``binary_type``, + ``list_type``) are admitted on the planned path only when a unified + dataset schema is pinned: the pin is the output-type authority (it + silently *undoes* these kwargs on the base path too), and the + alignment's drift casts already produce the pinned types. Without a + pinned schema the kwargs genuinely change output types — fall back. + - ``page_checksum_verification=True`` is admitted everywhere: the + crate is built with parquet's ``crc`` feature and always verifies + stored page CRCs, so ``True`` *is* the native behavior. An explicit + ``False`` — the opt-out for reading a file despite corrupt + checksums — is something the crate build cannot honor, so it falls + back to PyArrow (the only reader that can skip the check). + - A ``None`` value means "pyarrow default" for every format kwarg, so + ``None``-valued keys never block. + """ + allowed = _FORMAT_KWARGS_PERF_ONLY | ( + (_FORMAT_KWARGS_ALIGNED | _FORMAT_KWARGS_FOOTER_VERIFIED) + if aligned_ok + else frozenset() + ) + if aligned_ok and self._file_dataset_schema is not None: + allowed |= _FORMAT_KWARGS_SCHEMA_SHAPED + blocked: Dict[str, Any] = {} + for key, value in self._parquet_format_kwargs.items(): + if value is None or key in allowed: + continue + if key == "page_checksum_verification" and value is True: + continue + blocked[key] = value + return blocked + + def _reader_level_supported(self) -> bool: + """Reader-wide half of the *per-fragment* re-gate (the pyarrow-fragment + path in :meth:`_iter_fragment_tables`): filesystem + Parquet-format + kwargs. The aligned-kwarg checks stay here — not in the planned native + ``read()`` — because the per-fragment path has no crate footer metadata + to plan a :class:`_ColumnAlignment` from (a pyarrow + ``physical_schema`` already reflects ``coerce_int96_timestamp_unit`` / + ``dictionary_columns``, so an alignment computed from it would be a + false no-op). The planned path handles both kwargs natively via + :meth:`_plan_column_alignment`.""" + if not self._filesystem_supported(): + return False + if self._blocking_format_kwargs(aligned_ok=False): + return False + return True + + def _columns_supported( + self, + physical_schema: pa.Schema, + read_columns: Optional[List[str]], + int96_columns: Optional[List[str]] = None, + ) -> bool: + """Per-fragment re-gate verdict: native only when the decode needs *no* + post-decode fixups. Used by the pyarrow-fragment path, where the + alignment can't be trusted (see :meth:`_reader_level_supported`); the + planned ``read()`` instead admits any file with a plannable + :class:`_ColumnAlignment`.""" + alignment = self._plan_column_alignment( + physical_schema, read_columns, int96_columns + ) + return alignment is not None and alignment.is_noop + + def _plan_column_alignment( + self, + physical_schema: pa.Schema, + read_columns: Optional[List[str]], + int96_columns: Optional[List[str]] = None, + ) -> Optional[_ColumnAlignment]: + """Per-file half of the support gate, upgraded from a yes/no verdict to + a *plan*: how to make this file's native decode match what the pyarrow + scanner would produce. Returns ``None`` for a pyarrow fallback, a no-op + alignment for a byte-identical native decode, or a fixup plan + (null-fill / cast / reorder) the decode path applies per batch. + + Takes a ``pa.Schema`` (the crate's ``read_metadata`` schema — i.e. what + the crate will actually decode) plus, optionally, the root column names + the crate reports as INT96-physical. Still conservative — anything not + covered falls back to PyArrow, so correctness is never at risk: + + - empty projection (count scan) → handled upstream by the zero-decode + count path (:class:`_NativeCountFragment`) when there's no predicate; + ``None`` here so the per-fragment re-gate keeps PyArrow's stub dance; + - a column absent from this file (schema evolution) → **null-fill** + with the unified type (``None`` when there's no unified schema to + take the type from, or the fill type is an extension); + - an INT96 column → **cast** to timestamp[ns] (PyArrow's default; an + exact upcast from any embedded hint unit). When + ``coerce_int96_timestamp_unit`` is set the file **falls back** + instead: decode-time coercion floors, a post-decode cast truncates + toward zero — irreconcilable on pre-1970 values. Non-timestamp / + tz-carrying INT96 oddities stay on PyArrow; + - a forced ``dictionary_columns`` read → **cast** to + ``dictionary`` (what PyArrow's forced-dict decode + yields); non-string/binary targets stay on PyArrow; + - a per-file type that differs from the unified schema → **cast** to + the unified type (the scanner's implicit cast under a pinned + schema); extension-typed drift stays on PyArrow. + """ + unified_schema = self._file_dataset_schema + int96 = set(int96_columns or ()) + # The expected output columns: the explicit read set when projected; + # otherwise the *unified* schema's columns (the scanner outputs the + # pinned dataset schema, null-filling what a file lacks — using the + # file's own names here would silently drop evolved columns); the + # file's names only when there is no unified schema to pin. + if read_columns is not None: + names = read_columns + elif unified_schema is not None: + names = list(unified_schema.names) + else: + names = list(physical_schema.names) + + if read_columns is not None and len(read_columns) == 0: + return None + + coerce_unit = self._parquet_format_kwargs.get("coerce_int96_timestamp_unit") + dictionary_columns = set( + self._parquet_format_kwargs.get("dictionary_columns") or () + ) + + null_fill: List[Tuple[str, pa.DataType]] = [] + casts: List[Tuple[str, pa.DataType, bool]] = [] + for name in names: + idx = physical_schema.get_field_index(name) + if idx == -1: + # Column absent from this file (schema evolution): null-fill + # with the unified type — exactly pyarrow's behavior under a + # pinned dataset schema. Without a unified schema the fill type + # is unknowable — defer to PyArrow. + if unified_schema is None: + return None + unified_idx = unified_schema.get_field_index(name) + if unified_idx == -1: + return None + fill_type = unified_schema.field(unified_idx).type + if _is_extension_type(fill_type): + return None + null_fill.append((name, fill_type)) + continue + + field_type = physical_schema.field(idx).type + target = field_type + allow_time_truncate = False + if name in int96: + if coerce_unit is not None: + # A cast cannot reproduce pyarrow's decode-time coercion: + # pyarrow FLOORS (parquet types.h Int96GetXxx divide the + # unsigned nanos-of-day before adding the signed day + # offset) while a post-decode cast truncates the signed + # total toward zero — one unit apart on every pre-1970 + # value with a sub-unit remainder (measured: all 1715 + # negative values in the 1964 corpus fixture). The kwarg + # is honored by decoding this file via pyarrow instead. + return None + # No kwarg: pyarrow decodes INT96 to timestamp[ns, no tz]; the + # crate instead honors an embedded non-ns arrow-schema hint. + # Realign by casting to ns — an exact upcast (multiplication), + # never a truncation. + if not (pa.types.is_timestamp(target) and target.tz is None): + return None # nested/tz-carrying INT96 oddity — stay safe + target = pa.timestamp("ns") + if name in dictionary_columns: + # PyArrow's forced dictionary decode yields + # dictionary. Only string/binary + # columns are dictionary-read by pyarrow's parquet layer. + if not (pa.types.is_string(target) or pa.types.is_binary(target)): + return None + target = pa.dictionary(pa.int32(), target) + if unified_schema is not None: + unified_idx = unified_schema.get_field_index(name) + if unified_idx != -1: + unified_type = unified_schema.field(unified_idx).type + if unified_type != target: + # Per-file drift vs the pinned unified schema: the + # scanner casts implicitly; mirror it. Extension-typed + # drift (e.g. per-file tensor shapes) must not be cast. + if _is_extension_type(unified_type) or _is_extension_type( + target + ): + return None + target = unified_type + + if target != field_type: + casts.append((name, target, allow_time_truncate)) + + if not null_fill and not casts: + return _NOOP_ALIGNMENT + # Appended null-fill columns must land in read order (the scanner's + # projected-column order); reordering is only needed when a column was + # appended. + order = tuple(names) if null_fill else None + return _ColumnAlignment( + null_fill=tuple(null_fill), casts=tuple(casts), order=order + ) + + def _arrow_rs_supported( + self, + fragment: pds.ParquetFileFragment, + read_columns: Optional[List[str]], + ) -> bool: + """Whole-gate verdict for a pyarrow fragment: reader-level checks plus + the per-file column/type checks against the fragment's physical schema. + Used by the per-fragment ``_iter_fragment_tables`` path. + + A fragment's ``physical_schema`` is PyArrow's *post-coercion* Arrow schema, + so an INT96 column already reads as ``timestamp[ns]`` and can't reveal + whether the crate would decode it differently (it honors an embedded + non-ns hint). This re-gate can't see the crate's output, so it is + conservative: any INT96-physical read column falls the fragment back to + PyArrow. The authoritative plan-time gate (:meth:`_columns_supported` with + the crate's ``int96_columns``) is what admits INT96→ns files to the native + path; this path only ever *withholds*, never wrongly admits. + """ + if not self._reader_level_supported(): + return False + int96_roots = _pyarrow_fragment_int96_roots(fragment) + if int96_roots: + names = ( + read_columns + if read_columns is not None + else list(fragment.physical_schema.names) + ) + if any(name in int96_roots for name in names): + return False + return self._columns_supported(fragment.physical_schema, read_columns) + + @staticmethod + def _import_extension(): + """Import the native extension, raising a clear, actionable error if it + isn't built. Called on every native entry point so a missing module + surfaces loudly (never a silent fall back to PyArrow, which would + corrupt benchmark attribution).""" + try: + import ray_data_arrow_rs + + return ray_data_arrow_rs + except ImportError as e: + raise ImportError( + "use_arrow_rs_parquet_reader=True requires the " + "'ray_data_arrow_rs' extension. Build it with " + "`maturin develop --release` from " + "python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/." + ) from e + + def _resolve_read_columns_for(self, scanner_kwargs: dict) -> Optional[List[str]]: + """The set of columns the native decode must read from the file: the + projected columns plus any columns referenced only by the pushed filter + (which we still filter on post-decode). ``None`` means all columns.""" + from ray.data._internal.datasource.parquet_datasource import ( + _resolve_read_columns, + ) + from ray.data._internal.planner.plan_expression.expression_visitors import ( + get_column_references, + ) + + columns = scanner_kwargs.get("columns") + filter_expr = scanner_kwargs.get("filter") + filter_columns = ( + get_column_references(self._predicate) + if self._predicate is not None + else None + ) + return _resolve_read_columns(columns, filter_expr, filter_columns) + + @override + def _iter_fragment_tables( + self, + fragment: pds.Fragment, + scanner_kwargs: dict, + ) -> "Iterator[pa.Table]": + # Native front-end (arrow-rs ``read()``) hands us pyarrow-free work units. + if isinstance(fragment, _NativeCountFragment): + # Empty projection, no predicate: the footer count is exact — yield + # a zero-column table with the right num_rows and decode nothing. + # (``Table.select([])`` preserves ``num_rows``; the base path's + # zero-column tables flow through ``_postprocess`` identically.) + _trace_reader_path(True) + if fragment.num_rows > 0: + yield pa.table({"__num_rows": pa.nulls(fragment.num_rows)}).select([]) + return + if isinstance(fragment, _NativeParquetFragment): + _trace_reader_path(True) + yield from self._iter_native_tables( + fragment.path, + fragment.row_groups, + scanner_kwargs, + alignment=fragment.alignment, + ) + return + + # Pyarrow fragment (used when ``read()`` is not overridden, e.g. the + # reader-level-unsupported delegate, and by unit tests that drive this + # method directly). Re-check the per-fragment gate and either decode + # natively or fall back to the PyArrow scanner. + read_columns = self._resolve_read_columns_for(scanner_kwargs) + supported = self._arrow_rs_supported(fragment, read_columns) + _trace_reader_path(supported) + if not supported: + _raise_if_strict_no_fallback( + f"fragment {fragment.path!r} rejected by the per-fragment " + "support gate" + ) + yield from super()._iter_fragment_tables(fragment, scanner_kwargs) + return + + row_groups = ( + [rg.id for rg in fragment.row_groups] + if fragment.row_groups is not None + else None + ) + yield from self._iter_native_tables(fragment.path, row_groups, scanner_kwargs) + + def _iter_native_tables( + self, + path: str, + row_groups: Optional[List[int]], + scanner_kwargs: dict, + alignment: Optional[_ColumnAlignment] = None, + ) -> "Iterator[pa.Table]": + """Decode ``row_groups`` of ``path`` via the native crate and yield + ``pa.Table`` batches, applying the file's :class:`_ColumnAlignment` + (null-fill / cast / reorder) to each batch *before* the post-decode + filter so the predicate sees the same types pyarrow's scanner filters + on. + + Row-group pruning is native (``predicate.rs``), replacing PyArrow's + ``fragment.subset(filter=...)``: we hand the crate the row-group ids plus + the pushed predicate lowered to a JSON IR, and it drops the groups whose + footer statistics prove no row can match before fetching or decoding + them. Pruning is conservative by construction — a missing column, absent + stats, or an uncomparable type all *keep* the group — so it can only ever + avoid IO/decode, never change which rows surface. Row-level filtering + then runs post-decode here (the final authority), and a fully-pruned file + simply yields nothing. + """ + ray_data_arrow_rs = self._import_extension() + + from pyarrow.fs import S3FileSystem + + columns = scanner_kwargs.get("columns") + filter_expr = scanner_kwargs.get("filter") + batch_size = scanner_kwargs.get("batch_size") or _ARROW_DEFAULT_BATCH_SIZE + read_columns = self._resolve_read_columns_for(scanner_kwargs) + predicate_json = self._pushdown_predicate_json + + tuning = self._tuning + split_threshold = tuning.split_threshold_bytes + if split_threshold is None: + split_threshold = ( + self._target_block_size + if self._target_block_size is not None + else _ARROW_RS_DEFAULT_SPLIT_THRESHOLD_BYTES + ) + + fs = self._filesystem + if isinstance(fs, S3FileSystem): + bucket, _, key = path.partition("/") + cfg = _s3_config(fs) + reader = ray_data_arrow_rs.read_row_groups_s3( + bucket, + key, + cfg["region"], + cfg["anonymous"], + endpoint=cfg["endpoint"], + access_key_id=cfg["access_key_id"], + secret_access_key=cfg["secret_access_key"], + session_token=cfg["session_token"], + allow_http=cfg["allow_http"], + virtual_hosted_style=cfg["virtual_hosted_style"], + row_groups=row_groups, + columns=read_columns, + batch_size=batch_size, + decode_budget_bytes=tuning.decode_budget_bytes, + fetch_window_mb=tuning.fetch_window_mb, + k=tuning.k, + split_threshold_bytes=split_threshold, + prefetch_windows=tuning.prefetch_windows, + predicate_json=predicate_json, + ) + else: + reader = ray_data_arrow_rs.read_row_groups( + path, + row_groups, + read_columns, + batch_size, + tuning.decode_budget_bytes, + tuning.k, + split_threshold, + predicate_json, + ) + + record_batch_reader = pa.RecordBatchReader.from_stream(reader) + + # Yield each budget-sized batch straight through. The read op's + # BlockOutputBuffer coalesces to target_max_block_size downstream (same + # as the PyArrow path) — accumulating a full block here too would just + # stack a second block-sized buffer on top of it. See module docstring. + for batch in record_batch_reader: + table = pa.Table.from_batches([batch], schema=record_batch_reader.schema) + table = _apply_column_alignment(table, alignment) + # Same opt-in gate as the pyarrow path: unpickling an + # ArrowPythonObjectType column executes arbitrary code, so serving + # one requires the explicit env opt-in. Before the row filter — the + # check is schema-based, and pyarrow's scanner raises even for + # batches the filter would empty out. + if not self._allow_pickle_object_columns: + raise_on_pickle_object_columns(table) + if filter_expr is not None: + table = table.filter(filter_expr) + if table.num_rows == 0: + continue + if columns is not None: + table = table.select([c for c in columns if c in table.column_names]) + yield table diff --git a/python/ray/data/_internal/datasource_v2/readers/file_reader.py b/python/ray/data/_internal/datasource_v2/readers/file_reader.py index 479cfc9c1d71..990537116e21 100644 --- a/python/ray/data/_internal/datasource_v2/readers/file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/file_reader.py @@ -221,18 +221,11 @@ def read(self, input_split: FileManifest) -> Iterator[pa.Table]: # Split the requested columns into ones the on-disk file has # (pyarrow reads these) and ones we need to synthesize post-read - # (hive partition keys, "path"). ``self._columns is None`` means - # "no projection" — read every file column and synthesize every - # available partition/path column. + # (hive partition keys, "path"). on_disk_column_names = set(dataset.schema.names) - if self._columns is None: - columns_to_read_from_file: Optional[List[str]] = None - columns_to_synthesize: Optional[Set[str]] = None - else: - columns_to_read_from_file = [ - c for c in self._columns if c in on_disk_column_names - ] - columns_to_synthesize = set(self._columns) - on_disk_column_names + columns_to_read_from_file, columns_to_synthesize = self._split_columns( + on_disk_column_names + ) scanner_kwargs = { "columns": columns_to_read_from_file, @@ -244,10 +237,46 @@ def read(self, input_split: FileManifest) -> Iterator[pa.Table]: } scanner_kwargs.update(self._arrow_scanner_kwargs()) + triples = self._read_fragment_batches(dataset, scanner_kwargs, input_split) + yield from self._postprocess(triples, columns_to_synthesize) + + def _split_columns( + self, on_disk_column_names: Set[str] + ) -> Tuple[Optional[List[str]], Optional[Set[str]]]: + """Split the requested ``columns`` into (read-from-file, synthesize). + + ``self._columns is None`` means "no projection" — read every file + column and synthesize every available partition/path column, so both + halves are ``None``. Otherwise the requested columns are partitioned by + whether they exist on disk; the rest (hive partition keys, ``path``, + ``row_hash``) are synthesized post-read. Shared by the base pyarrow + ``read()`` and subclass front-ends (e.g. the arrow-rs reader). + """ + if self._columns is None: + return None, None + columns_to_read_from_file = [ + c for c in self._columns if c in on_disk_column_names + ] + columns_to_synthesize = set(self._columns) - on_disk_column_names + return columns_to_read_from_file, columns_to_synthesize + + def _postprocess( + self, + triples: Iterator[Tuple[pa.Table, str, int]], + columns_to_synthesize: Optional[Set[str]], + ) -> Iterator[pa.Table]: + """Apply the format-agnostic per-table finishing steps to a stream of + ``(table, fragment_path, fragment_row_offset)`` triples: ``limit`` + slicing, partition/``path`` synthesis, ``row_hash`` synthesis, column + projection/reordering, and the zero-column stub guard. Yields the + finished tables. + + Factored out of :meth:`read` so any front-end that can produce the same + triples — pyarrow scanners *or* the native arrow-rs decode path — reuses + identical post-read semantics (row hashes, partition columns, limit). + """ rows_read = 0 - for table, fragment_path, fragment_row_offset in self._read_fragment_batches( - dataset, scanner_kwargs, input_split - ): + for table, fragment_path, fragment_row_offset in triples: if self._limit is not None: if rows_read >= self._limit: break @@ -413,8 +442,6 @@ def _read_fragment_batches( which we materialize below anyway. File data is still read lazily by the worker threads. """ - ctx = DataContext.get_current() - # ``preserve_ordering=True`` would drain the input iterator # eagerly anyway, so materialize once here to (a) cap # ``num_workers`` at the actual fragment count and (b) avoid @@ -423,9 +450,26 @@ def _read_fragment_batches( # ``_get_fragments_to_read`` to fan out chunk-level # sub-fragments from the manifest's chunk metadata. fragments_with_offsets = self._get_fragments_to_read(dataset, manifest) + yield from self._dispatch_fragment_reads(fragments_with_offsets, scanner_kwargs) + + def _dispatch_fragment_reads( + self, + fragments_with_offsets: List[Tuple[pds.Fragment, int]], + scanner_kwargs: dict, + ) -> Iterator[Tuple[pa.Table, str, int]]: + """Read a pre-materialized ``[(fragment, file_row_offset)]`` list, either + sequentially or across a bounded thread pool, preserving fragment order. + + Split out of :meth:`_read_fragment_batches` so front-ends that build the + fragment list some other way — e.g. the arrow-rs reader assembling native + and pyarrow-fallback fragments per file — reuse the same threading, retry, + and ordering semantics. ``fragment`` need only expose ``.path`` and be + accepted by :meth:`_iter_fragment_tables`. + """ if not fragments_with_offsets: return + ctx = DataContext.get_current() num_workers = len(fragments_with_offsets) if num_workers <= 1 or ctx.execution_options.preserve_order: yield from self._read_fragments_sequential( diff --git a/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py b/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py index 5ff7744e9210..b06c29c0ed2d 100644 --- a/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py +++ b/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py @@ -67,12 +67,32 @@ def read_schema(self) -> pa.Schema: return schema def create_reader(self) -> ParquetFileReader: - """Create a ParquetFileReader configured for this scanner. + """Create the Parquet reader configured for this scanner. + + Returns the experimental arrow-rs reader when + ``DataContext.use_arrow_rs_parquet_reader`` is set, otherwise the + PyArrow ``ParquetFileReader``. The two share an identical constructor, + so the reader class is the only thing that changes. Returns: - ParquetFileReader with all pushdowns and adaptive batch sizing. + A reader with all pushdowns and adaptive batch sizing. """ - return ParquetFileReader( + from ray.data.context import DataContext + + reader_cls = ParquetFileReader + if DataContext.get_current().use_arrow_rs_parquet_reader: + # Import lazily so the default PyArrow path never imports the + # optional native extension. A missing extension raises inside + # the reader's ``_iter_fragment_tables`` with a build hint rather + # than silently falling back — silent fallback would corrupt + # benchmark attribution. + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( # noqa: E501 + ArrowRsParquetFileReader, + ) + + reader_cls = ArrowRsParquetFileReader + + return reader_cls( batch_size=self.batch_size, columns=list(self.columns) if self.columns is not None else None, predicate=self.predicate, diff --git a/python/ray/data/context.py b/python/ray/data/context.py index 1ec774a3ac23..eb66c8be574f 100644 --- a/python/ray/data/context.py +++ b/python/ray/data/context.py @@ -84,6 +84,14 @@ class ShuffleStrategy(str, enum.Enum): DEFAULT_USE_DATASOURCE_V2 = env_bool("RAY_DATA_USE_DATASOURCE_V2", True) +# Prototype flag: route the V2 Parquet read path through the experimental +# arrow-rs (Rust) reader instead of PyArrow. Only takes effect when +# ``use_datasource_v2`` is also set. Requires the native ``ray_data_arrow_rs`` +# module to be installed. Defaults to False. +DEFAULT_USE_ARROW_RS_PARQUET_READER = env_bool( + "RAY_DATA_USE_ARROW_RS_PARQUET_READER", False +) + # Default target chunk size for ``ParquetFileChunker``. ``None`` means the chunker # uses its built-in default (currently 1 GiB). DEFAULT_PARQUET_CHUNKER_TARGET_CHUNK_SIZE: Optional[int] = None @@ -591,6 +599,12 @@ class DataContext: override with ``RAY_DATA_USE_DATASOURCE_V2`` (``0`` for V1, ``1`` for V2). Parquet is the only reader migrated to V2 so far; the others read through V1 for now regardless of this flag. + use_arrow_rs_parquet_reader: Prototype flag. When True (and + ``use_datasource_v2`` is also True), ``ParquetScanner.create_reader()`` + returns the experimental arrow-rs (Rust) reader + (``ArrowRsParquetFileReader``) instead of the PyArrow + ``ParquetFileReader``. Requires the native ``ray_data_arrow_rs`` + module. Defaults to False. parquet_chunker_target_chunk_size: Target chunk size in bytes used by ``ParquetFileChunker`` when splitting large Parquet files into multiple read tasks. When ``None``, the chunker's built-in default @@ -899,6 +913,7 @@ class DataContext: min_parallelism: int = DEFAULT_MIN_PARALLELISM read_op_min_num_blocks: int = DEFAULT_READ_OP_MIN_NUM_BLOCKS use_datasource_v2: bool = DEFAULT_USE_DATASOURCE_V2 + use_arrow_rs_parquet_reader: bool = DEFAULT_USE_ARROW_RS_PARQUET_READER # Target chunk size in bytes for ``ParquetFileChunker``. When ``None``, the # chunker uses its built-in default (currently 1 GiB). parquet_chunker_target_chunk_size: Optional[ diff --git a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py new file mode 100644 index 000000000000..7c907a083846 --- /dev/null +++ b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py @@ -0,0 +1,2658 @@ +"""Correctness + integration tests for the experimental arrow-rs Parquet reader. + +These run only when the native ``ray_data_arrow_rs`` extension is importable +(built via ``maturin`` from the crate under +``_internal/datasource_v2/native/ray_data_arrow_rs/``); otherwise the whole +module is skipped. They confirm that: + +- reading through the arrow-rs path yields byte-identical columns to PyArrow, +- the native decode path actually runs (not the PyArrow fallback), and +- unsupported schemas transparently fall back to PyArrow and stay correct. +""" +import os + +import numpy as np +import pyarrow as pa +import pyarrow.compute as pc +import pyarrow.parquet as pq +import pytest + +import ray +from ray.data.context import DataContext +from ray.data.datasource.path_util import _unwrap_protocol + +ray_data_arrow_rs = pytest.importorskip("ray_data_arrow_rs") + + +@pytest.fixture +def restore_ctx(): + ctx = DataContext.get_current() + v2, arrow_rs = ctx.use_datasource_v2, ctx.use_arrow_rs_parquet_reader + try: + ctx.use_datasource_v2 = True + yield ctx + finally: + ctx.use_datasource_v2 = v2 + ctx.use_arrow_rs_parquet_reader = arrow_rs + + +def _flat_table(num_rows=20_000): + rng = np.random.default_rng(0) + return pa.table( + { + "id": pa.array(np.arange(num_rows, dtype=np.int64)), + "x": pa.array(rng.random(num_rows)), + "label": pa.array((np.arange(num_rows) % 5).astype(np.int32)), + "name": pa.array([f"row-{i}" for i in range(num_rows)]), + } + ) + + +def _read_sorted(path, use_arrow_rs, restore_ctx, **read_kwargs): + restore_ctx.use_arrow_rs_parquet_reader = use_arrow_rs + ds = ray.data.read_parquet(str(path), **read_kwargs) + return pa.Table.from_pandas(ds.to_pandas()).sort_by("id") + + +def _read_arrow_sorted(path, use_arrow_rs, restore_ctx, **read_kwargs): + """Like :func:`_read_sorted` but materializes straight to Arrow (no pandas + round-trip). Required for columns whose Arrow type can't round-trip through + pandas — e.g. multi-dimensional tensor extensions, which ``from_pandas`` + rejects ("Can only convert 1-dimensional array values"). Both readers go + through this identically, so the ``.equals`` comparison stays a fair parity + check on the reader output itself.""" + restore_ctx.use_arrow_rs_parquet_reader = use_arrow_rs + ds = ray.data.read_parquet(str(path), **read_kwargs) + return pa.concat_tables(ray.get(ds.to_arrow_refs())).sort_by("id") + + +@pytest.mark.parametrize("row_group_size", [20_000, 5_000]) +def test_arrow_rs_parity_full_scan(tmp_path, restore_ctx, row_group_size): + """arrow-rs and PyArrow produce identical tables (full scan).""" + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table( + table, str(path), write_page_index=True, row_group_size=row_group_size + ) + + pa_tbl = _read_sorted(path, False, restore_ctx) + rs_tbl = _read_sorted(path, True, restore_ctx) + + assert pa_tbl.num_rows == rs_tbl.num_rows == table.num_rows + assert pa_tbl.equals(rs_tbl) + + +def test_arrow_rs_parity_with_projection(tmp_path, restore_ctx): + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table(table, str(path), write_page_index=True) + + pa_tbl = _read_sorted(path, False, restore_ctx, columns=["id", "x"]) + rs_tbl = _read_sorted(path, True, restore_ctx, columns=["id", "x"]) + assert rs_tbl.column_names == ["id", "x"] + assert pa_tbl.equals(rs_tbl) + + +@pytest.mark.parametrize("row_group_size", [20_000, 5_000]) +def test_arrow_rs_parity_sum(tmp_path, restore_ctx, row_group_size): + """The aggregation workload benchmarked in Agents.md §3.3 (``ds.sum()``) must + return identical results via the arrow-rs decode path and PyArrow. This is a + decode-heavy / output-light consumer: the read decodes every value and the + aggregation collapses it to a scalar, so it exercises full-column decode + correctness end-to-end through Ray's aggregation, not just a raw table read. + """ + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table( + table, str(path), write_page_index=True, row_group_size=row_group_size + ) + + # Ground truth from the source table, independent of either reader. + expected_id = pc.sum(table["id"]).as_py() + expected_label = pc.sum(table["label"]).as_py() + + restore_ctx.use_arrow_rs_parquet_reader = False + pa_sum = ray.data.read_parquet(str(path)).sum(["id", "label"]) + restore_ctx.use_arrow_rs_parquet_reader = True + rs_sum = ray.data.read_parquet(str(path)).sum(["id", "label"]) + + assert rs_sum == pa_sum + assert rs_sum["sum(id)"] == expected_id + assert rs_sum["sum(label)"] == expected_label + + +def _read_crate_stream(path, **kwargs): + """Read a file straight through the crate (bypassing the reader) into a + single table, so we can force the K-split path via ``split_threshold_bytes`` + / ``k`` explicitly.""" + stream = ray_data_arrow_rs.read_row_groups(str(path), **kwargs) + return pa.RecordBatchReader.from_stream(stream).read_all() + + +@pytest.mark.parametrize("k", [2, 4, 8]) +def test_kspilt_parity_and_order(tmp_path, k): + """The intra-fragment K-split path (single big row group, forced via + ``split_threshold_bytes=0``) must be byte-identical to both the sequential + (k=1) crate path and PyArrow, and preserve row order across the K parallel + range workers. + + Row order is the load-bearing property here: the split decodes K disjoint + row ranges on separate threads and merges them back. A merge bug would + surface as a shuffled ``id`` column even when the row *set* is correct, so + we assert the ``id`` column is exactly ``0..n-1`` in order. + """ + num_rows = 50_000 + path = tmp_path / "big_single_rg.parquet" + table = _flat_table(num_rows) + # One row group covering all rows → a lone fragment Ray's pool can't split. + pq.write_table(table, str(path), write_page_index=True, row_group_size=num_rows) + assert pq.ParquetFile(str(path)).num_row_groups == 1 + + # k=1 sequential (never splits) vs forced K-split (threshold=0). + seq = _read_crate_stream(path, k=1) + split = _read_crate_stream(path, k=k, split_threshold_bytes=0) + + # Byte-identical to the sequential path and to the source table. + assert split.equals(seq) + assert split.equals(table) + # Order preserved across ranges: id is exactly 0..n-1, not just the right set. + assert split.column("id").to_pylist() == list(range(num_rows)) + + +def test_native_path_actually_runs(tmp_path): + """Directly exercise the reader and confirm it calls the native extension + rather than silently falling back to PyArrow.""" + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table(table, str(path), write_page_index=True) + + calls = {"n": 0} + orig = ray_data_arrow_rs.read_row_groups + + def wrapped(*a, **k): + calls["n"] += 1 + return orig(*a, **k) + + ray_data_arrow_rs.read_row_groups = wrapped + try: + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + dataset = pds.dataset(str(path), format="parquet", filesystem=LocalFileSystem()) + fragment = next(dataset.get_fragments()) + scanner_kwargs = { + "columns": None, + "filter": None, + "batch_size": reader._resolve_batch_size(dataset), + } + got = pa.concat_tables( + list(reader._iter_fragment_tables(fragment, scanner_kwargs)) + ) + finally: + ray_data_arrow_rs.read_row_groups = orig + + assert calls["n"] > 0, "native read_row_groups was not called (fell back)" + assert got.sort_by("id").equals(table.sort_by("id")) + + +def _make_manifest(paths, sizes, chunk_metadatas): + from ray.data._internal.datasource_v2.listing.file_manifest import FileManifest + + return FileManifest.construct_manifest(paths, sizes, chunk_metadatas) + + +def test_native_read_is_pyarrow_free(tmp_path, monkeypatch): + """The whole point of the ``read()`` rewrite: for a file the native reader + supports, PyArrow must *never open it*. The footer, row-group layout, and + decode all come from the crate (``read_metadata`` + ``read_row_groups``); + ``pyarrow.dataset.dataset`` — the only way the base reader opens a Parquet + file — must not be called at all. + + We drive ``reader.read(manifest)`` directly (not through + ``ray.data.read_parquet``) so the assertion is scoped to the *read* stage: + the listing/indexing stage does call pyarrow to enumerate row groups, and + counting over a full pipeline execution would conflate the two. Here the + manifest is handed in pre-built, so any ``pds.dataset`` call can only come + from the reader itself. + """ + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table(table, str(path), write_page_index=True) + + # Spy: pyarrow.dataset.dataset must NOT be called for a supported native read. + ds_calls = {"n": 0} + orig_dataset = pds.dataset + + def spy_dataset(*a, **k): + ds_calls["n"] += 1 + return orig_dataset(*a, **k) + + monkeypatch.setattr(pds, "dataset", spy_dataset) + + # Spy: the native crate must actually run (metadata footer read + decode), + # so a "0 pyarrow calls" result can't be a silent no-op. + native_calls = {"read_metadata": 0, "read_row_groups": 0} + for name in native_calls: + orig = getattr(ray_data_arrow_rs, name) + + def make_spy(orig, name): + def spy(*a, **k): + native_calls[name] += 1 + return orig(*a, **k) + + return spy + + monkeypatch.setattr(ray_data_arrow_rs, name, make_spy(orig, name)) + + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + got = pa.concat_tables(list(reader.read(manifest))) + + assert ds_calls["n"] == 0, ( + "pyarrow.dataset.dataset was called during a supported native read " + "(pyarrow opened the file — the read is not pyarrow-free)" + ) + assert native_calls["read_metadata"] > 0, "native footer read never ran" + assert native_calls["read_row_groups"] > 0, "native decode never ran" + assert got.sort_by("id").equals(table.sort_by("id")) + + +def _write_pickle_object_file(path, objs): + import pickle + + from ray.data._internal.object_extensions.arrow import ArrowPythonObjectType + + ext_type = ArrowPythonObjectType() + storage = pa.array([pickle.dumps(o) for o in objs], type=ext_type.storage_type) + table = pa.table( + { + "id": pa.array(range(len(objs)), type=pa.int64()), + "obj": pa.ExtensionArray.from_storage(ext_type, storage), + } + ) + pq.write_table(table, str(path), write_page_index=True) + + +def test_native_read_rejects_pickle_object_columns(tmp_path, monkeypatch): + """The pyarrow path refuses to serve pickled-object columns without the + explicit env opt-in — unpickling executes arbitrary code, so the guard is + a security boundary, not a convenience. The native path must enforce the + same gate. Regression test for the corpus `pickle_default` finding, where + the native decode served the column with no error.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + marker = tmp_path / "exploit_marker" + + class Exploit: + def __reduce__(self): + return (os.system, (f"touch {marker}",)) + + path = tmp_path / "data.parquet" + _write_pickle_object_file(path, [Exploit()]) + + monkeypatch.delenv("RAY_DATA_AUTOLOAD_PICKLE_OBJECT_SCALAR", raising=False) + + # Spy: the raise must come from the NATIVE path — if the file fell back, + # the pyarrow reader's own guard would fire and this test would prove + # nothing about the native one. + native_calls = {"n": 0} + orig = ray_data_arrow_rs.read_row_groups + + def spy(*a, **k): + native_calls["n"] += 1 + return orig(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", spy) + + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + with pytest.raises(ValueError, match="arrow_pickled_object"): + pa.concat_tables(list(reader.read(manifest))) + + assert native_calls["n"] > 0, "native decode never ran (pyarrow fallback?)" + assert not marker.exists(), "pickle.load executed attacker code" + + +def test_native_read_allows_pickle_object_columns_with_env_var(tmp_path, monkeypatch): + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "data.parquet" + _write_pickle_object_file(path, [{"key": "value"}, {"key": "other"}]) + + monkeypatch.setenv("RAY_DATA_AUTOLOAD_PICKLE_OBJECT_SCALAR", "1") + + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + got = pa.concat_tables(list(reader.read(manifest))).sort_by("id") + assert got.column("obj").to_pylist() == [{"key": "value"}, {"key": "other"}] + + +def _write_int96_file(path, num_rows=1_000): + """INT96-physical timestamps, all pre-1970 and 1ns past a microsecond + boundary — the values where decode-time unit coercion (floors) and a + post-decode cast (truncates toward zero) differ by exactly one unit.""" + us_vals = [(i - num_rows) * 86_400_000_000 + i for i in range(num_rows)] + table = pa.table( + { + "id": pa.array(range(num_rows), type=pa.int64()), + "ts": pa.array([v * 1000 + 1 for v in us_vals], type=pa.timestamp("ns")), + } + ) + pq.write_table( + table, + str(path), + use_deprecated_int96_timestamps=True, + store_schema=False, + write_page_index=True, + ) + + +def test_coerce_int96_kwarg_parity(tmp_path, restore_ctx): + """`coerce_int96_timestamp_unit` must yield exactly what the base V2 + pyarrow reader yields. On the full V2 pipeline that is subtle: the pinned + unified schema (kwarg-blind ``pq.read_schema``) casts the coerced values + BACK to the inferred ns — so the kwarg's observable effect is + ms-quantized-and-FLOORED *values* in an ns-typed column. A native ns + decode plus cast can't reproduce the floor on pre-1970 values, so the + reader falls back per file; this test pins the observable contract, + however it's met. Regression test for the corpus `int96_coerce_ms` + finding (native path returned raw ns, ignoring the kwarg).""" + path = tmp_path / "int96.parquet" + _write_int96_file(path) + + kw = {"dataset_kwargs": {"coerce_int96_timestamp_unit": "ms"}} + expected = _read_arrow_sorted( + path, use_arrow_rs=False, restore_ctx=restore_ctx, **kw + ) + got = _read_arrow_sorted(path, use_arrow_rs=True, restore_ctx=restore_ctx, **kw) + assert got.equals(expected) + + # The kwarg must have had its observable effect (guards against a "parity" + # where both readers ignored it): values are ms-quantized and floored — + # the raw values sit 1ns past a µs boundary, so flooring to ms lands on + # the boundary and truncation toward zero would not. + ts = expected.column("ts").cast(pa.int64()).to_pylist() + raw = _read_arrow_sorted(path, use_arrow_rs=False, restore_ctx=restore_ctx) + raw_ts = raw.column("ts").cast(pa.int64()).to_pylist() + assert all(v % 1_000_000 == 0 for v in ts), "values not ms-quantized" + assert all(v <= r for v, r in zip(ts, raw_ts)), "not floored (truncated?)" + + +def test_coerce_int96_kwarg_routes_int96_file_to_fallback(tmp_path, monkeypatch): + """The kwarg-honoring mechanism: a file that decodes an INT96 column under + `coerce_int96_timestamp_unit` must NOT go native; the same file without + the kwarg must.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "int96.parquet" + _write_int96_file(path) + + native_calls = {"n": 0} + orig = ray_data_arrow_rs.read_row_groups + + def spy(*a, **k): + native_calls["n"] += 1 + return orig(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", spy) + + def run(parquet_format_kwargs): + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), + target_block_size=128 * 1024 * 1024, + parquet_format_kwargs=parquet_format_kwargs, + ) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + return pa.concat_tables(list(reader.read(manifest))) + + native_calls["n"] = 0 + with_kwarg = run({"coerce_int96_timestamp_unit": "ms"}) + assert native_calls["n"] == 0, "int96 file went native despite the kwarg" + assert with_kwarg.schema.field("ts").type == pa.timestamp("ms") + + native_calls["n"] = 0 + without_kwarg = run(None) + assert native_calls["n"] > 0, "int96 file without the kwarg should stay native" + assert without_kwarg.schema.field("ts").type == pa.timestamp("ns") + + +def test_native_chunked_read_row_hash_parity(tmp_path): + """A chunked file (one manifest row per ``[row_group_start, row_group_end)`` + range) must produce byte-identical ``row_hash`` values via the native path + and PyArrow. + + ``row_hash`` is seeded by ``(fragment_path, file_row_offset)`` per sub- + fragment (:func:`_compute_row_hashes`), so this is the load-bearing test for + :meth:`ArrowRsParquetFileReader._native_fragments_for_file`: it must emit one + native fragment *per row group* seeded with that group's cumulative pre-filter + row offset, exactly mirroring the base ``_fragments_from_chunk_metadata``. A + single off-by-one in the offset accumulation would shift the hashes and this + would catch it. We drive both readers on the *same* hand-built chunked + manifest so the only variable is the fragment-offset logic. + """ + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.chunkers.file_chunker import ( + ParquetFileChunkMetadata, + create_chunk_metadata, + ) + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + from ray.data._internal.datasource_v2.readers.parquet_file_reader import ( + ParquetFileReader, + ) + + path = tmp_path / "data.parquet" + table = _flat_table(20_000) + # 4 row groups of 5k rows each. + pq.write_table(table, str(path), write_page_index=True, row_group_size=5_000) + assert pq.ParquetFile(str(path)).num_row_groups == 4 + + # Two chunks over the same file: row groups [0,2) and [2,4). This forces the + # per-row-group native fragment path with a non-zero offset on the 2nd chunk. + chunks = [ + create_chunk_metadata( + ParquetFileChunkMetadata, row_group_start=0, row_group_end=2 + ), + create_chunk_metadata( + ParquetFileChunkMetadata, row_group_start=2, row_group_end=4 + ), + ] + size = os.path.getsize(path) + manifest = _make_manifest([str(path), str(path)], [size, size], chunks) + + def read_all(reader_cls): + reader = reader_cls( + filesystem=LocalFileSystem(), + target_block_size=128 * 1024 * 1024, + include_row_hash=True, + ) + return pa.concat_tables(list(reader.read(manifest))).sort_by("id") + + rs_tbl = read_all(ArrowRsParquetFileReader) + pa_tbl = read_all(ParquetFileReader) + + assert "row_hash" in rs_tbl.column_names + assert rs_tbl.num_rows == table.num_rows + assert rs_tbl.equals(pa_tbl) + + +def test_native_read_include_paths_parity(tmp_path): + """``include_paths`` synthesis (the ``path`` column) must match PyArrow when + the file is read natively. Driven on the same whole-file manifest through + both readers.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + from ray.data._internal.datasource_v2.readers.parquet_file_reader import ( + ParquetFileReader, + ) + + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table(table, str(path), write_page_index=True) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + + def read_all(reader_cls): + reader = reader_cls( + filesystem=LocalFileSystem(), + target_block_size=128 * 1024 * 1024, + include_paths=True, + ) + return pa.concat_tables(list(reader.read(manifest))).sort_by("id") + + rs_tbl = read_all(ArrowRsParquetFileReader) + pa_tbl = read_all(ParquetFileReader) + + assert "path" in rs_tbl.column_names + assert set(rs_tbl.column("path").to_pylist()) == {str(path)} + assert rs_tbl.equals(pa_tbl) + + +def test_native_read_partitioning_parity(tmp_path, restore_ctx): + """A partition column (encoded in the directory path, absent from the file's + on-disk schema) must be synthesized identically on the native path. + + This exercises native-path-specific planning: ``_plan_native_read`` derives + ``on_disk_names`` from the *crate's* footer schema, which won't contain the + partition column, so it must land in the synthesize set (not be read from the + file). End-to-end through ``read_parquet`` so Ray's hive-partition detection + drives the layout. + """ + base = tmp_path / "parts" + table = _flat_table(6_000) + for g in range(3): + sub = base / f"grp={g}" + sub.mkdir(parents=True) + part = table.slice(g * 2_000, 2_000) + pq.write_table(part, str(sub / "data.parquet"), write_page_index=True) + + pa_tbl = _read_sorted(base, False, restore_ctx) + rs_tbl = _read_sorted(base, True, restore_ctx) + + assert "grp" in rs_tbl.column_names + assert pa_tbl.equals(rs_tbl) + + +def test_count_is_metadata_only_under_arrow_rs(tmp_path, restore_ctx): + """``ds.count()`` is answered from listing metadata and never invokes the + reader — so it is correct under the arrow-rs flag by construction, with zero + native decode (a count scan reads no data columns, so there is no working set + to shrink; handling it natively would buy no memory). This guards that the + metadata short-circuit stays intact when the flag is on.""" + from ray.data._internal.datasource_v2.readers import ( + arrow_rs_parquet_file_reader as mod, + ) + + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table(table, str(path), write_page_index=True) + + read_calls = {"n": 0} + orig_read = mod.ArrowRsParquetFileReader.read + + def spy_read(self, *a, **k): + read_calls["n"] += 1 + return orig_read(self, *a, **k) + + mod.ArrowRsParquetFileReader.read = spy_read + try: + restore_ctx.use_arrow_rs_parquet_reader = True + count = ray.data.read_parquet(str(path)).count() + finally: + mod.ArrowRsParquetFileReader.read = orig_read + + assert count == table.num_rows + assert read_calls["n"] == 0, "count unexpectedly invoked the reader" + + +def test_empty_projection_counts_natively_with_zero_decode(tmp_path, monkeypatch): + """A column-less read (empty projection, no predicate) is answered from the + footer row counts alone: no crate decode, no ``pds.dataset`` — strictly + less work than PyArrow's stub-column scan. The yielded tables are + zero-column with the right ``num_rows``; ``_postprocess``'s stub guard + re-adds the row-preserving stub, exactly as on the base path.""" + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table(table, str(path), write_page_index=True) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + + calls = {"decode": 0, "pds": 0} + orig_decode = ray_data_arrow_rs.read_row_groups + orig_dataset = pds.dataset + + def decode_spy(*a, **k): + calls["decode"] += 1 + return orig_decode(*a, **k) + + def dataset_spy(*a, **k): + calls["pds"] += 1 + return orig_dataset(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", decode_spy) + monkeypatch.setattr(pds, "dataset", dataset_spy) + + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), + target_block_size=128 * 1024 * 1024, + columns=[], + ) + tables = list(reader.read(manifest)) + assert sum(t.num_rows for t in tables) == table.num_rows + # The stub-column guard in ``_postprocess`` preserves row counts. + assert all(len(t.column_names) == 1 for t in tables) + # The whole answer came from the footer: nothing was decoded, and pyarrow + # never opened the file. + assert calls["decode"] == 0 + assert calls["pds"] == 0 + + +def test_native_fragment_read_retries_transient_error(tmp_path, monkeypatch): + """A transient I/O failure during native decode must be retried and + recovered exactly like the PyArrow path — the native ``_NativeParquetFragment`` + flows through the same ``iterate_with_retry`` wrapper in + ``_read_fragments_sequential``. We inject a one-shot retryable error (matching + a default ``retried_io_errors`` pattern) into the crate's ``read_row_groups`` + and assert the read still returns byte-correct data and that the crate was + re-invoked (the retry fired).""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "data.parquet" + table = _flat_table() + pq.write_table(table, str(path), write_page_index=True) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + + calls = {"n": 0} + orig = ray_data_arrow_rs.read_row_groups + + def flaky_read_row_groups(*a, **k): + calls["n"] += 1 + if calls["n"] == 1: + # A default-retryable message (context.DEFAULT_RETRIED_IO_ERRORS), so + # no context mutation is needed. Raised before any batch is yielded. + raise OSError("AWS Error SLOW_DOWN: injected transient failure") + return orig(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", flaky_read_row_groups) + + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + got = pa.concat_tables(list(reader.read(manifest))) + + assert calls["n"] >= 2, "native read was not retried after a transient error" + assert got.sort_by("id").equals(table.sort_by("id")) + + +def test_filter_pushdown_prunes_row_groups(tmp_path, restore_ctx): + """A pushed-down predicate is lowered to the native pruning IR and handed to + the crate, which drops the row groups whose footer statistics prove no row + can match — replacing PyArrow's ``fragment.subset``. On a sorted ``id`` over + 4 row groups, ``id >= 3000`` reaches the crate as a non-None ``predicate_json`` + that prunes to row group ``[3]`` (verified via ``select_row_groups``); a + predicate no row group can satisfy yields an empty result. Results stay + byte-correct because the Python post-filter is the final authority.""" + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data.expressions import col + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "sorted.parquet" + n = 4000 + table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "x": pa.array(np.arange(n) * 0.5), + } + ) + pq.write_table(table, str(path), write_page_index=True, row_group_size=1000) + + # `read_row_groups(path, row_groups, columns, batch_size, budget, k, + # split_threshold, predicate_json)` — capture the row_groups handed in and + # the predicate_json (8th positional) the reader lowered. + seen = [] + orig = ray_data_arrow_rs.read_row_groups + + def wrapped(path_, row_groups, *a, **k): + predicate_json = a[5] if len(a) > 5 else k.get("predicate_json") + seen.append((row_groups, predicate_json)) + return orig(path_, row_groups, *a, **k) + + def _run(predicate): + # Mirror `read()`: the reader's Ray `Expr` predicate drives native + # pruning, and its pyarrow form is the scanner filter used for the + # post-decode row filter. + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), + target_block_size=128 * 1024 * 1024, + predicate=predicate, + ) + dataset = pds.dataset(str(path), format="parquet", filesystem=LocalFileSystem()) + fragment = next(dataset.get_fragments()) + batch_size = reader._resolve_batch_size(dataset) + return list( + reader._iter_fragment_tables( + fragment, + { + "columns": None, + "filter": predicate.to_pyarrow(), + "batch_size": batch_size, + }, + ) + ) + + ray_data_arrow_rs.read_row_groups = wrapped + try: + got = pa.concat_tables(_run(col("id") >= 3000)) + pruned_all = _run(col("id") >= 10**9) + finally: + ray_data_arrow_rs.read_row_groups = orig + + # The crate receives the fragment's full row-group list plus the lowered + # predicate; pruning happens *inside* the crate now, not before the call. + (rg0, pj0), (rg1, pj1) = seen + assert rg0 == [0, 1, 2, 3], f"expected all row groups handed to crate: {rg0}" + assert pj0 is not None, "predicate did not lower to a pruning IR" + # Prove the IR actually prunes to the single satisfying row group. + assert ray_data_arrow_rs.select_row_groups(str(path), pj0) == [3] + assert got.sort_by("id").equals(table.slice(3000)) + # A fully-unsatisfiable predicate prunes every group inside the crate, so + # the stream is empty (the crate is still invoked — one cheap footer read). + assert pruned_all == [] + assert ray_data_arrow_rs.select_row_groups(str(path), pj1) == [] + + +def test_filter_pushdown_e2e_parity(tmp_path, restore_ctx): + """``ds.filter(expr=...)`` goes through the PredicatePushdown rule into the + read; both readers must agree (and match ground truth) on a sorted + multi-row-group file where pruning actually kicks in.""" + path = tmp_path / "sorted_e2e.parquet" + n = 4000 + table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "x": pa.array(np.arange(n) * 0.5), + } + ) + pq.write_table(table, str(path), write_page_index=True, row_group_size=1000) + + def _read(use_arrow_rs): + restore_ctx.use_arrow_rs_parquet_reader = use_arrow_rs + ds = ray.data.read_parquet(str(path)).filter(expr="id >= 3500") + return pa.Table.from_pandas(ds.to_pandas()).sort_by("id") + + pa_tbl = _read(False) + rs_tbl = _read(True) + assert pa_tbl.num_rows == rs_tbl.num_rows == 500 + assert pa_tbl.equals(rs_tbl) + + +@pytest.mark.parametrize( + "expr", + [ + # Partial pruning across the middle two row groups (0 and 3 prune). + "id >= 1500 and id < 2500", + # Compound over multiple types, with a string equality conjunct. + 'id >= 1500 and id < 2500 and g == "g2"', + # OR of two disjoint ranges — neither end row group prunes. + "id < 500 or id >= 3500", + # Float comparison drives the pruning column. + "x >= 900.0 and x < 1100.0", + # A predicate no row group can satisfy (fully pruned → empty). + "id >= 100000000", + ], +) +def test_filter_pushdown_compound_parity(tmp_path, restore_ctx, expr): + """Native row-group pruning + Python post-filter must be byte-identical to + the PyArrow v2 reader across compound predicates spanning int/float/string + columns and multiple row groups. This is the backstop for native pruning + being the sole mechanism: any over-pruning bug would drop rows PyArrow keeps + and fail here. + """ + path = tmp_path / "compound.parquet" + n = 4000 + table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "x": pa.array(np.arange(n) * 0.5), + "g": pa.array([f"g{i % 5}" for i in range(n)]), + } + ) + pq.write_table(table, str(path), write_page_index=True, row_group_size=1000) + + def _read(use_arrow_rs): + restore_ctx.use_arrow_rs_parquet_reader = use_arrow_rs + # take_all() over sort() preserves the schema even for empty results + # (to_pandas() on an empty dataset yields a 0-column frame). + ds = ray.data.read_parquet(str(path)).filter(expr=expr).sort("id") + return ds.take_all() + + pa_rows = _read(False) + rs_rows = _read(True) + # Row-for-row parity across every column (dicts compare all keys/values). + assert rs_rows == pa_rows, ( + f"arrow-rs diverged from pyarrow for `{expr}`: " + f"{len(rs_rows)} vs {len(pa_rows)} rows" + ) + + +def _gate_verdict(path, read_columns=None): + """The support gate's verdict for a file, via a real fragment.""" + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + reader = ArrowRsParquetFileReader(filesystem=LocalFileSystem()) + frag = next( + pds.dataset( + str(path), format="parquet", filesystem=LocalFileSystem() + ).get_fragments() + ) + return reader._arrow_rs_supported(frag, read_columns) + + +@pytest.mark.parametrize( + "colname,builder", + [ + ("vals", lambda n: pa.array([[i, i + 1, None] for i in range(n)])), + ( + "st", + lambda n: pa.StructArray.from_arrays( + [pa.array(np.arange(n)), pa.array(np.arange(n) * 0.5)], + names=["a", "b"], + ), + ), + ( + "st_nested", + lambda n: pa.array( + [{"a": [i, i + 1], "b": {"c": f"row-{i}"}} for i in range(n)] + ), + ), + ], +) +def test_nested_column_native_parity(tmp_path, restore_ctx, colname, builder): + """List, struct, and deeper struct/list nesting decode NATIVELY (the gate + admits them) and stay byte-identical to PyArrow.""" + path = tmp_path / f"{colname}.parquet" + n = 2000 + table = pa.table( + {"id": pa.array(np.arange(n, dtype=np.int64)), colname: builder(n)} + ) + pq.write_table(table, str(path), write_page_index=True) + + assert _gate_verdict(path) is True, f"{colname} should be native now" + pa_tbl = _read_sorted(path, False, restore_ctx) + rs_tbl = _read_sorted(path, True, restore_ctx) + assert pa_tbl.equals(rs_tbl) + + +def _list_col_from_lengths(lengths, *, value_type=pa.int64(), null_rows=None, seed=0): + """Build a ``list`` array where row ``i`` holds ``lengths[i]`` + elements (deterministic but arbitrary values). ``null_rows`` is an optional + boolean mask marking rows that are NULL lists — distinct from empty lists; + those rows are forced to zero length because Parquet cannot store a null list + that spans elements.""" + lengths = np.asarray(lengths, dtype=np.int64).copy() + if null_rows is not None: + null_rows = np.asarray(null_rows, dtype=bool) + lengths[null_rows] = 0 + offsets = np.zeros(len(lengths) + 1, dtype=np.int32) + np.cumsum(lengths, out=offsets[1:]) + total = int(offsets[-1]) + rng = np.random.default_rng(seed) + if pa.types.is_string(value_type): + values = pa.array([f"e{v}" for v in rng.integers(0, 10**6, total)]) + else: + values = pa.array(rng.integers(0, 10**9, total), type=value_type) + mask = None if null_rows is None else pa.array(null_rows) + return pa.ListArray.from_arrays(pa.array(offsets), values, mask=mask) + + +@pytest.mark.parametrize( + "shape,lengths_fn", + [ + ("empty", lambda n: np.zeros(n, dtype=np.int64)), + ("singleton", lambda n: np.ones(n, dtype=np.int64)), + ("small_fixed", lambda n: np.full(n, 4, dtype=np.int64)), + ("big_fixed", lambda n: np.full(n, 512, dtype=np.int64)), + ("ascending", lambda n: np.arange(n, dtype=np.int64)), + ("descending", lambda n: np.arange(n, dtype=np.int64)[::-1]), + ("random", lambda n: np.random.default_rng(0).integers(0, 128, n)), + ], +) +def test_list_length_shapes_native_parity(tmp_path, restore_ctx, shape, lengths_fn): + """``list`` columns across every length distribution — all-empty, + singleton, small/big fixed width, monotonically ascending and descending + ramps, and random sizes — decode NATIVELY and stay byte-identical to PyArrow. + + The 2k-row fixed-length-3 parity test alone leaves the offset handling barely + exercised: it never sees wide lists, empty rows, or non-uniform offsets, which + is exactly where the crate's offset buffer and its footer bytes-per-row + estimate are most likely to slip.""" + n = 1000 + table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "vals": _list_col_from_lengths(lengths_fn(n)), + } + ) + path = tmp_path / f"list_{shape}.parquet" + pq.write_table(table, str(path), write_page_index=True) + + assert _gate_verdict(path) is True, f"list<{shape}> should decode natively" + pa_tbl = _read_sorted(path, False, restore_ctx) + rs_tbl = _read_sorted(path, True, restore_ctx) + assert pa_tbl.equals(rs_tbl) + + +def test_list_null_rows_and_string_values_parity(tmp_path, restore_ctx): + """Null lists (list-level nulls, distinct from empty lists) and a + ``list`` column with variable sizes both decode natively and match + PyArrow — covering non-int element types and the validity buffer alongside + the offsets.""" + n = 500 + lengths = np.random.default_rng(1).integers(0, 20, n) + null_rows = np.arange(n) % 7 == 0 # every 7th row is a NULL list + table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "ints": _list_col_from_lengths(lengths, null_rows=null_rows, seed=2), + "strs": _list_col_from_lengths( + lengths, value_type=pa.string(), null_rows=null_rows, seed=3 + ), + } + ) + path = tmp_path / "list_nulls.parquet" + pq.write_table(table, str(path), write_page_index=True) + + assert _gate_verdict(path) is True + pa_tbl = _read_sorted(path, False, restore_ctx) + rs_tbl = _read_sorted(path, True, restore_ctx) + assert pa_tbl.equals(rs_tbl) + + +def test_large_nested_byte_budget_batching(tmp_path, monkeypatch): + """A LARGE nested read (variable-length lists + struct-of-string, decoded + size many times the decode budget, one lone row group) must stream through + the byte-budget path as many small batches — not one giant table — while + staying byte-identical and in row order. + + The small parity tests (2k rows) fit in a single budget batch, so they never + prove the batching math holds for nested types, where the footer's + bytes-per-row estimate is coarser than for flat columns. The budget is + shrunk to 1 MiB via monkeypatch (it's a module global read at call time), so + this must run the reader in-process rather than through Ray workers. + """ + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers import ( + arrow_rs_parquet_file_reader as reader_mod, + ) + + n = 200_000 + rng = np.random.default_rng(0) + # Variable-length list (avg ~6 elems, some empty) + struct{int, str}. + lens = rng.integers(0, 12, n) + offsets = np.zeros(n + 1, dtype=np.int32) + np.cumsum(lens, out=offsets[1:]) + values = pa.array(rng.integers(0, 10**9, offsets[-1]), type=pa.int64()) + table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "vals": pa.ListArray.from_arrays(pa.array(offsets), values), + "st": pa.StructArray.from_arrays( + [ + pa.array(np.arange(n, dtype=np.int64)), + pa.array([f"payload-string-{i:012d}" for i in range(n)]), + ], + names=["a", "b"], + ), + } + ) + path = tmp_path / "large_nested.parquet" + # One row group covering all rows: the whole decode must be paced by the + # byte budget, with no row-group boundaries helping out. + pq.write_table(table, str(path), write_page_index=True, row_group_size=n) + assert pq.ParquetFile(str(path)).num_row_groups == 1 + + budget = 1024 * 1024 + monkeypatch.setattr(reader_mod, "_ARROW_RS_DECODE_BUDGET_BYTES", budget) + assert table.nbytes > 10 * budget # "large": decoded size >> budget + + calls = {"n": 0} + orig = ray_data_arrow_rs.read_row_groups + + def wrapped(*a, **k): + calls["n"] += 1 + return orig(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", wrapped) + reader = reader_mod.ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + dataset = pds.dataset(str(path), format="parquet", filesystem=LocalFileSystem()) + fragment = next(dataset.get_fragments()) + scanner_kwargs = { + "columns": None, + "filter": None, + "batch_size": reader._resolve_batch_size(dataset), + } + batches = list(reader._iter_fragment_tables(fragment, scanner_kwargs)) + + assert calls["n"] > 0, "native read_row_groups was not called (fell back)" + # Streaming, not slurping: many batches, each near the budget (generous 8x + # slack because the crate sizes rows from the footer's bytes-per-row, which + # is approximate for variable-width nested data). + assert len(batches) >= 5, f"expected many budget batches, got {len(batches)}" + assert max(b.nbytes for b in batches) <= 8 * budget + got = pa.concat_tables(batches) + # In-order and byte-identical (no sort: order is part of the contract). + assert got.equals(table) + + +def test_scanner_leak_signature_and_arrow_rs_avoids_it(tmp_path, monkeypatch): + """Reproduce the PyArrow accumulation behind ray#49158 / apache/arrow#39808 and + show the arrow-rs reader sidesteps it. + + The reported "leak" is ``pyarrow.dataset`` ``to_batches`` (the Scanner) + accumulating ~the whole file in the Arrow allocator *regardless of batch_size*, + whereas ``pq.ParquetFile.iter_batches`` (what the V2 reader uses) holds only ~a + row group. We measure exactly as the issue did: ``pa.total_allocated_bytes()`` + tracked as a running max across the batch iteration. + + The arrow-rs reader decodes in Rust and hands batches across a zero-copy FFI + boundary, so decoded data never enters the Arrow allocator at all — its + Arrow-side peak is ~0, categorically below the row-group floor iter_batches + pays. (This asserts Arrow-allocator accumulation only, which is deterministic; + the Rust working set is invisible here and is validated by RSS/USS in the + bench suite. It is a regression guard: the pyarrow tiers must stay ordered and + arrow-rs must not start buffering decoded data on the Arrow side.) + """ + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers import ( + arrow_rs_parquet_file_reader as reader_mod, + ) + + # 800k rows of fat strings split into many small row groups, so "whole file" + # (to_batches) and "one row group" (iter_batches) are clearly different scales. + n = 800_000 + rng = np.random.default_rng(0) + cols = {"id": pa.array(np.arange(n, dtype=np.int64))} + for i in range(4): + cols[f"s{i}"] = pa.array( + [f"val-{rng.integers(0, 10**6)}-{'x' * 8}" for _ in range(n)] + ) + table = pa.table(cols) + file_mb = table.nbytes / 1024 / 1024 + path = tmp_path / "leaky.parquet" + pq.write_table( + table, + str(path), + row_group_size=50_000, + write_page_index=True, + compression="snappy", + ) + n_rg = pq.ParquetFile(str(path)).num_row_groups + assert n_rg >= 8 # need many groups for file-scale vs row-group-scale to differ + del table, cols + import gc + + gc.collect() + + def _peak_mb(make_iter): + """Max Arrow-allocator bytes held at once across the iteration (MB) — the + issue's own metric. Baseline-subtracted so unrelated allocations don't + count; each batch is dropped so only what the reader *retains* is seen.""" + base = pa.total_allocated_bytes() + mx = 0 + for batch in make_iter(): + mx = max(mx, pa.total_allocated_bytes() - base) + del batch + return mx / 1024 / 1024 + + def _fragment(): + return next(pds.dataset(str(path), format="parquet").get_fragments()) + + # (1) Scanner/to_batches accumulates ~the whole file, and does NOT shrink with + # batch_size — the leak signature. + to_small = _peak_mb(lambda: _fragment().to_batches(batch_size=256)) + to_big = _peak_mb(lambda: _fragment().to_batches(batch_size=2048)) + assert to_small > 0.4 * file_mb, (to_small, file_mb) + assert abs(to_small - to_big) < 0.3 * to_small, (to_small, to_big) + + # (2) ParquetFile.iter_batches (the V2 read path) holds only ~a row group — + # materially below to_batches. Better, but still a whole-row-group floor. + it_small = _peak_mb(lambda: pq.ParquetFile(str(path)).iter_batches(batch_size=256)) + assert it_small < 0.6 * to_small, (it_small, to_small) + + # (3) arrow-rs: decoded data is Rust-owned and crosses via zero-copy FFI, so ~0 + # lands in the Arrow allocator — below even the row-group floor. + monkeypatch.setattr(reader_mod, "_ARROW_RS_DECODE_BUDGET_BYTES", 1024 * 1024) + reader = reader_mod.ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + dataset = pds.dataset(str(path), format="parquet", filesystem=LocalFileSystem()) + frag = next(dataset.get_fragments()) + scanner_kwargs = { + "columns": None, + "filter": None, + "batch_size": reader._resolve_batch_size(dataset), + } + rs_peak = _peak_mb(lambda: reader._iter_fragment_tables(frag, scanner_kwargs)) + assert rs_peak < 0.5 * it_small, (rs_peak, it_small) + + +def test_map_column_native_parity(tmp_path, restore_ctx): + """Map columns decode NATIVELY (the gate admits them) and byte-identically to + PyArrow — including null and empty map entries spread across multiple row + groups. Verified empirically: the crate emits an identical ``MapType`` (same + key/value field names) and the same values, so ``pa.Table.equals`` holds.""" + n = 500 + map_path = tmp_path / "map.parquet" + map_table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "m": pa.array( + [ + None + if i % 50 == 0 + else ([] if i % 9 == 0 else [(f"k{i}", i), ("b", i * 2)]) + for i in range(n) + ], + type=pa.map_(pa.string(), pa.int64()), + ), + } + ) + pq.write_table(map_table, str(map_path), write_page_index=True, row_group_size=100) + assert _gate_verdict(map_path) is True + pa_tbl = _read_sorted(map_path, False, restore_ctx) + rs_tbl = _read_sorted(map_path, True, restore_ctx) + assert pa_tbl.equals(rs_tbl) + + +def test_dictionary_column_native_parity(tmp_path, restore_ctx): + """A *naturally* dictionary-typed column (the file embeds an arrow dictionary + type) decodes natively and byte-identically to PyArrow, even with per-row-group + dictionaries and nulls — Parquet dictionaries are per-row-group, the classic + index-divergence trap, so this spans several row groups on purpose. + + Distinct from the ``dictionary_columns`` *forced* read (columns coerced to + dictionary output at read time), which the planned path handles via an + alignment cast (see ``test_forced_dictionary_columns_native_parity``).""" + n = 500 + path = tmp_path / "dict.parquet" + vals = [None if i % 37 == 0 else f"cat{(i * 7) % 13}" for i in range(n)] + table = pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "d": pa.array(vals, type=pa.dictionary(pa.int32(), pa.string())), + } + ) + pq.write_table(table, str(path), write_page_index=True, row_group_size=100) + assert _gate_verdict(path) is True + pa_tbl = _read_sorted(path, False, restore_ctx) + rs_tbl = _read_sorted(path, True, restore_ctx) + assert pa_tbl.equals(rs_tbl) + + +def test_extension_types_native_parity(tmp_path, restore_ctx): + """Extension types decode NATIVELY and byte-identically to PyArrow: Ray's + tensor extension, its variable-shaped (ragged) tensor, and pyarrow's canonical + ``fixed_shape_tensor``. + + The crate carries the embedded arrow-schema field metadata + (``ARROW:extension:name`` / ``:metadata``) straight through the C data + interface, so pyarrow reconstructs the *registered* extension identically on + the native and PyArrow paths. (This is the case a blanket ``extension_name`` + rejection used to fall back — empirically it round-trips, so the gate now + recurses into the storage type instead.)""" + from ray.data.extensions import ArrowTensorArray, ArrowVariableShapedTensorArray + + n = 400 + + # Ray fixed-shape tensor, spanning several row groups. + tpath = tmp_path / "tensor.parquet" + tens = ArrowTensorArray.from_numpy( + np.arange(4 * n, dtype=np.float32).reshape(n, 2, 2) + ) + pq.write_table( + pa.table({"id": pa.array(np.arange(n, dtype=np.int64)), "t": tens}), + str(tpath), + write_page_index=True, + row_group_size=100, + ) + assert _gate_verdict(tpath) is True + assert _read_arrow_sorted(tpath, False, restore_ctx).equals( + _read_arrow_sorted(tpath, True, restore_ctx) + ) + + # Ray variable-shaped (ragged) tensor — storage is a struct(data, shape). + vpath = tmp_path / "vtensor.parquet" + ragged = np.array( + [np.arange(i % 5 + 1, dtype=np.int64) for i in range(n)], dtype=object + ) + vst = ArrowVariableShapedTensorArray.from_numpy(ragged) + pq.write_table( + pa.table({"id": pa.array(np.arange(n, dtype=np.int64)), "t": vst}), + str(vpath), + write_page_index=True, + row_group_size=100, + ) + assert _gate_verdict(vpath) is True + assert _read_arrow_sorted(vpath, False, restore_ctx).equals( + _read_arrow_sorted(vpath, True, restore_ctx) + ) + + # pyarrow canonical fixed_shape_tensor (not isinstance(ExtensionType) on some + # versions — caught via extension_name). + if hasattr(pa, "fixed_shape_tensor"): + cpath = tmp_path / "canonical.parquet" + flat = pa.array(np.arange(n * 4, dtype=np.float32), type=pa.float32()) + storage = pa.FixedSizeListArray.from_arrays(flat, 4) + tarr = pa.ExtensionArray.from_storage( + pa.fixed_shape_tensor(pa.float32(), [4]), storage + ) + pq.write_table( + pa.table({"id": pa.array(np.arange(n, dtype=np.int64)), "t": tarr}), + str(cpath), + write_page_index=True, + row_group_size=100, + ) + assert _gate_verdict(cpath) is True + assert _read_arrow_sorted(cpath, False, restore_ctx).equals( + _read_arrow_sorted(cpath, True, restore_ctx) + ) + + # There is no per-type support gate to unit-check anymore: every + # Parquet-encodable type is admitted (proven by the parity reads above), and + # Arrow's in-memory-only types (union, list_view, run_end_encoded, ...) have + # no Parquet encoding — PyArrow refuses to write them ("Unhandled type for + # Arrow to Parquet schema conversion") — so they can never appear in a + # footer-derived schema. The old ``_arrow_rs_type_supported`` gate on them + # was unreachable dead code, removed 2026-07-28. + union_array = pa.UnionArray.from_dense( + pa.array([0], pa.int8()), + pa.array([0], pa.int32()), + [pa.array([1], pa.int64())], + ) + with pytest.raises(pa.lib.ArrowNotImplementedError, match="Unhandled type"): + pq.write_table(pa.table({"u": union_array}), str(tmp_path / "union.parquet")) + + +def test_arrow_rs_supported_gate(tmp_path): + """Unit-check the fallback gate: local flat AND struct/list = supported; + empty projection / unknown-not-on-disk column (no unified schema to + null-fill from) / non-local filesystem = unsupported.""" + import pyarrow.dataset as pds + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + flat = tmp_path / "flat.parquet" + pq.write_table(_flat_table(1000), str(flat), write_page_index=True) + nested = tmp_path / "nested.parquet" + pq.write_table( + pa.table({"id": pa.array([1, 2]), "v": pa.array([[1], [2]])}), str(nested) + ) + + reader = ArrowRsParquetFileReader(filesystem=LocalFileSystem()) + + flat_frag = next( + pds.dataset( + str(flat), format="parquet", filesystem=LocalFileSystem() + ).get_fragments() + ) + nested_frag = next( + pds.dataset( + str(nested), format="parquet", filesystem=LocalFileSystem() + ).get_fragments() + ) + + assert reader._arrow_rs_supported(flat_frag, None) is True + assert reader._arrow_rs_supported(flat_frag, ["id", "x"]) is True + # Empty projection → fall back. + assert reader._arrow_rs_supported(flat_frag, []) is False + # List column → native (ungated 2026-07-21). + assert reader._arrow_rs_supported(nested_frag, None) is True + # A requested column that isn't on disk (here a dotted name — in real reads + # ``_split_columns`` filters these out before the gate) is treated as a + # missing column; with no unified schema to null-fill from → fall back. + assert reader._arrow_rs_supported(nested_frag, ["v.item"]) is False + + # Unknown filesystem (neither local nor S3) → fall back. + reader_no_fs = ArrowRsParquetFileReader(filesystem=None) + assert reader_no_fs._arrow_rs_supported(flat_frag, None) is False + + +# --------------------------------------------------------------------------- +# read_metadata FFI (Track 1): arrow-rs owns the footer read. The crate returns +# the Arrow schema (via the C-schema PyCapsule) plus per-row-group counts, so the +# Python reader no longer has to build a PyArrow dataset to learn the layout. +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize("row_group_size", [20_000, 5_000]) +def test_read_metadata_matches_pyarrow(tmp_path, row_group_size): + import ray_data_arrow_rs + + table = _flat_table(20_000) + path = tmp_path / "meta.parquet" + pq.write_table( + table, str(path), row_group_size=row_group_size, write_page_index=True + ) + + pf = pq.ParquetFile(str(path)) + md = ray_data_arrow_rs.read_metadata(str(path)) + + # Schema round-trips exactly through __arrow_c_schema__ (types + names). + assert pa.schema(md).equals(pf.schema_arrow) + assert md.num_rows == pf.metadata.num_rows + assert md.num_row_groups == pf.metadata.num_row_groups + assert md.row_group_num_rows == [ + pf.metadata.row_group(i).num_rows for i in range(pf.metadata.num_row_groups) + ] + assert len(md.row_group_byte_sizes) == pf.metadata.num_row_groups + assert all(b > 0 for b in md.row_group_byte_sizes) + + +# --------------------------------------------------------------------------- +# Native predicate pushdown, part 1: statistics-based row-group pruning. +# +# These cover the seam the Rust unit tests (which use synthetic ColStats) can't: +# lowering a Ray Expr to the IR (`_predicate_to_ir`) and reading *real* Parquet +# statistics into that pruning (`select_row_groups` / `read_row_groups`'s +# `predicate_json`). Pruning is row-group granular — a surviving group is decoded +# whole; row-level filtering is the reader's post-decode job, exercised +# separately by the end-to-end filter parity tests above. +# --------------------------------------------------------------------------- + + +def _sorted_rg_table(n=4000): + """A sorted int ``id`` (+ float ``x``, string ``g``) so that with + ``row_group_size=1000`` each of the 4 row groups holds a disjoint id range, + making stats pruning observable.""" + return pa.table( + { + "id": pa.array(np.arange(n, dtype=np.int64)), + "x": pa.array(np.arange(n) * 0.5), + "g": pa.array([f"k{i // 1000}" for i in range(n)]), # k0..k3 per group + } + ) + + +def _ir(expr): + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + _predicate_to_ir, + ) + + return _predicate_to_ir(expr) + + +def test_predicate_to_ir_lowering(): + """The Ray Expr -> IR lowering produces the expected shapes, flips the op + when the column is on the right, and degrades unrepresentable nodes to + ``unknown`` (keeping the rest of a conjunction prunable).""" + from ray.data.expressions import col, lit + + assert _ir(col("id") >= 3000) == { + "t": "cmp", + "col": "id", + "op": "ge", + "value": {"vt": "int", "v": 3000}, + } + # literal-on-left flips ge -> le + assert _ir(lit(3000) <= col("id")) == { + "t": "cmp", + "col": "id", + "op": "ge", + "value": {"vt": "int", "v": 3000}, + } + # conjunction; float + string literals tagged by type + assert _ir((col("x") < 1.5) & (col("g") == "k2")) == { + "t": "and", + "preds": [ + {"t": "cmp", "col": "x", "op": "lt", "value": {"vt": "float", "v": 1.5}}, + {"t": "cmp", "col": "g", "op": "eq", "value": {"vt": "str", "v": "k2"}}, + ], + } + assert _ir(col("id").is_null()) == {"t": "is_null", "col": "id"} + assert _ir(col("id").is_in([1, 2, 3])) == { + "t": "in", + "col": "id", + "values": [ + {"vt": "int", "v": 1}, + {"vt": "int", "v": 2}, + {"vt": "int", "v": 3}, + ], + "negated": False, + } + # a UDF conjunct is unrepresentable -> unknown, but the other conjunct stays. + part = _ir((col("id") >= 3000) & (col("x").abs() > 1.0)) + assert part["t"] == "and" + assert part["preds"][0] == { + "t": "cmp", + "col": "id", + "op": "ge", + "value": {"vt": "int", "v": 3000}, + } + assert part["preds"][1] == {"t": "unknown"} + + +def test_predicate_json_skips_when_nothing_prunable(): + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + _predicate_json, + ) + from ray.data.expressions import col + + assert _predicate_json(None) is None + # A bare UDF predicate lowers entirely to unknown -> no pushdown arg. + assert _predicate_json(col("x").abs() > 1.0) is None + assert _predicate_json(col("id") >= 3000) is not None + + +def test_select_row_groups_pruning_on_real_stats(tmp_path): + """``select_row_groups`` prunes using the file's actual footer statistics, + across int / float / string columns, and never over-prunes.""" + import json + + path = tmp_path / "sorted.parquet" + table = _sorted_rg_table(4000) + pq.write_table(table, str(path), write_page_index=True, row_group_size=1000) + + def sel(expr): + return ray_data_arrow_rs.select_row_groups(str(path), json.dumps(_ir(expr))) + + from ray.data.expressions import col + + # No predicate -> all four groups. + assert ray_data_arrow_rs.select_row_groups(str(path), None) == [0, 1, 2, 3] + # id in [0,999],[1000,1999],[2000,2999],[3000,3999] per group. + assert sel(col("id") >= 3000) == [3] + assert sel(col("id") >= 3500) == [3] # group-granular: whole group 3 survives + assert sel(col("id") < 1000) == [0] + assert sel(col("id") >= 10**9) == [] # nothing can match + assert sel((col("id") >= 1500) & (col("id") < 2500)) == [1, 2] + # float column (x = id*0.5, so group 3 is [1500, 1999.5]) + assert sel(col("x") >= 1800.0) == [3] + # string column pruning (g = "k0".."k3") + assert sel(col("g") == "k2") == [2] + assert sel(col("g") == "zzz") == [] + # is_in over the string groups + assert sel(col("g").is_in(["k0", "k3"])) == [0, 3] + + +def test_read_row_groups_predicate_json_decodes_only_surviving_groups(tmp_path): + """End to end through the crate: ``predicate_json`` prunes row groups before + decode, so the stream contains exactly the surviving groups' rows (whole + groups — row-level filtering is applied by the reader, not here) and stays + byte-correct and in order.""" + import json + + path = tmp_path / "sorted.parquet" + table = _sorted_rg_table(4000) + pq.write_table(table, str(path), write_page_index=True, row_group_size=1000) + + from ray.data.expressions import col + + # id >= 3000 keeps only group 3 (rows 3000..3999). + got = _read_crate_stream(path, predicate_json=json.dumps(_ir(col("id") >= 3000))) + assert got.equals(table.slice(3000, 1000)) + + # id >= 3500 keeps group 3 whole (pruning is row-group granular). + got = _read_crate_stream(path, predicate_json=json.dumps(_ir(col("id") >= 3500))) + assert got.equals(table.slice(3000, 1000)) + + # A fully-pruning predicate yields an empty (schema-correct) stream. + got = _read_crate_stream(path, predicate_json=json.dumps(_ir(col("id") >= 10**9))) + assert got.num_rows == 0 + assert got.column_names == ["id", "x", "g"] + + +# --------------------------------------------------------------------------- +# S3 (moto server). The crate reads S3 through the Rust `object_store` client, +# so it needs a real HTTP endpoint — Ray Data's `s3_server` fixture (a moto +# server) provides one. These prove the native path (a) connects with the same +# endpoint/credentials/region PyArrow used (recovered from the S3FileSystem via +# `_s3_config`), and (b) returns byte-identical data. +# --------------------------------------------------------------------------- + + +def _s3_write(table, s3_fs, s3_path, name="data.parquet"): + """Write ``table`` as one file into the moto S3 dir, return the s3:// URI.""" + base = _unwrap_protocol(s3_path) # strip s3:// → bucket/key + key = os.path.join(base, name) + pq.write_table(table, key, filesystem=s3_fs, write_page_index=True) + return f"s3://{key}" + + +def _read_s3_sorted(uri, s3_fs, use_arrow_rs, restore_ctx, **read_kwargs): + restore_ctx.use_arrow_rs_parquet_reader = use_arrow_rs + ds = ray.data.read_parquet(uri, filesystem=s3_fs, **read_kwargs) + return pa.Table.from_pandas(ds.to_pandas()).sort_by("id") + + +def test_s3_config_recovers_endpoint_and_creds(s3_fs): + """`_s3_config` must recover the moto endpoint, static creds, region, and + (critically) allow_http from an http:// endpoint whose `scheme` field still + reads 'https' — otherwise the crate can't reach moto/MinIO.""" + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + _s3_config, + ) + + cfg = _s3_config(s3_fs) + assert cfg["endpoint"] and cfg["endpoint"].startswith("http://") + assert cfg["allow_http"] is True + assert cfg["region"] == "us-west-2" + assert cfg["access_key_id"] == "testing" + assert cfg["secret_access_key"] == "testing" + assert cfg["anonymous"] is False + + +def test_read_metadata_s3_matches_pyarrow(s3_fs, s3_path): + """`read_metadata_s3` fetches the footer over the moto endpoint (same config + recovery as the data path) and returns the same schema + row-group counts as + PyArrow reading the same object.""" + import ray_data_arrow_rs + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + _s3_config, + ) + + table = _flat_table(20_000) + uri = _s3_write(table, s3_fs, s3_path, name="meta.parquet") + bucket, _, key = _unwrap_protocol(uri).partition("/") + + pf = pq.ParquetFile(_unwrap_protocol(uri), filesystem=s3_fs) + + cfg = _s3_config(s3_fs) + md = ray_data_arrow_rs.read_metadata_s3( + bucket, + key, + cfg["region"], + cfg["anonymous"], + endpoint=cfg["endpoint"], + access_key_id=cfg["access_key_id"], + secret_access_key=cfg["secret_access_key"], + session_token=cfg["session_token"], + allow_http=cfg["allow_http"], + virtual_hosted_style=cfg["virtual_hosted_style"], + ) + + assert pa.schema(md).equals(pf.schema_arrow) + assert md.num_rows == pf.metadata.num_rows + assert md.num_row_groups == pf.metadata.num_row_groups + assert md.row_group_num_rows == [ + pf.metadata.row_group(i).num_rows for i in range(pf.metadata.num_row_groups) + ] + + +def test_arrow_rs_s3_parity(s3_fs, s3_path, restore_ctx): + """Full-scan parity reading from (moto) S3 via the native path vs PyArrow.""" + table = _flat_table() + uri = _s3_write(table, s3_fs, s3_path) + + pa_tbl = _read_s3_sorted(uri, s3_fs, False, restore_ctx) + rs_tbl = _read_s3_sorted(uri, s3_fs, True, restore_ctx) + + assert rs_tbl.num_rows == table.num_rows + assert pa_tbl.equals(rs_tbl) + + +def test_arrow_rs_s3_parity_with_projection(s3_fs, s3_path, restore_ctx): + table = _flat_table() + uri = _s3_write(table, s3_fs, s3_path) + + pa_tbl = _read_s3_sorted(uri, s3_fs, False, restore_ctx, columns=["id", "x"]) + rs_tbl = _read_s3_sorted(uri, s3_fs, True, restore_ctx, columns=["id", "x"]) + assert rs_tbl.column_names == ["id", "x"] + assert pa_tbl.equals(rs_tbl) + + +def test_arrow_rs_s3_native_path_runs(s3_fs, s3_path): + """Confirm an S3 fragment actually goes through the native crate's S3 entry + point (``read_row_groups_s3``), not a silent PyArrow fallback. Exercised via + the reader directly (in-process) so the monkeypatch can observe the call — + a ``ray.data.read_parquet`` read would run in a worker the driver can't patch. + """ + import pyarrow.dataset as pds + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + table = _flat_table() + _s3_write(table, s3_fs, s3_path) + base = _unwrap_protocol(s3_path) + + calls = {"n": 0} + orig = ray_data_arrow_rs.read_row_groups_s3 + + def wrapped(*a, **k): + calls["n"] += 1 + return orig(*a, **k) + + ray_data_arrow_rs.read_row_groups_s3 = wrapped + try: + reader = ArrowRsParquetFileReader( + filesystem=s3_fs, target_block_size=128 * 1024 * 1024 + ) + dataset = pds.dataset(base, format="parquet", filesystem=s3_fs) + fragment = next(dataset.get_fragments()) + scanner_kwargs = { + "columns": None, + "filter": None, + "batch_size": reader._resolve_batch_size(dataset), + } + got = pa.concat_tables( + list(reader._iter_fragment_tables(fragment, scanner_kwargs)) + ) + finally: + ray_data_arrow_rs.read_row_groups_s3 = orig + + assert calls["n"] > 0, "native read_row_groups_s3 was not called (fell back)" + assert got.sort_by("id").equals(table.sort_by("id")) + + +def test_arrow_rs_s3_sum(s3_fs, s3_path, restore_ctx): + """The `ds.sum()` aggregation workload (§3.3) over S3 must match PyArrow and + ground truth — decode-heavy / output-light through the native S3 path.""" + table = _flat_table() + uri = _s3_write(table, s3_fs, s3_path) + expected = pc.sum(table["id"]).as_py() + + restore_ctx.use_arrow_rs_parquet_reader = False + pa_sum = ray.data.read_parquet(uri, filesystem=s3_fs).sum("id") + restore_ctx.use_arrow_rs_parquet_reader = True + rs_sum = ray.data.read_parquet(uri, filesystem=s3_fs).sum("id") + + assert rs_sum == pa_sum == expected + + +@pytest.mark.parametrize("k", [2, 4, 8]) +def test_arrow_rs_s3_kspilt_windowed_order(s3_fs, s3_path, k): + """The windowed K-split S3 path (lone big row group → K concurrent GET streams, + plus a small fetch window slicing each range into sub-windows) must return rows + in EXACT file order — not just the right set. Forces the path by calling the + native entry point directly with a tiny split threshold and window; a monotone + `id` column then makes any range/window mis-ordering a hard failure. + """ + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + _s3_config, + ) + + n = 50_000 + table = pa.table({"id": pa.array(np.arange(n, dtype=np.int64))}) + _s3_write(table, s3_fs, s3_path, name="mono.parquet") + + base = _unwrap_protocol(s3_path) + bucket, _, key = os.path.join(base, "mono.parquet").partition("/") + cfg = _s3_config(s3_fs) + + stream = ray_data_arrow_rs.read_row_groups_s3( + bucket, + key, + cfg["region"], + cfg["anonymous"], + endpoint=cfg["endpoint"], + access_key_id=cfg["access_key_id"], + secret_access_key=cfg["secret_access_key"], + session_token=cfg["session_token"], + allow_http=cfg["allow_http"], + virtual_hosted_style=cfg["virtual_hosted_style"], + row_groups=[0], + columns=["id"], + batch_size=4096, + fetch_window_mb=1, # force sub-window slicing within each range + k=k, + split_threshold_bytes=1, # force the K-split path on a small file + ) + got = pa.RecordBatchReader.from_stream(stream).read_all() + assert got.num_rows == n + # Exact order: id must be 0,1,2,...,n-1 with no reordering across K ranges. + assert got["id"].to_pylist() == list(range(n)) + + +@pytest.mark.parametrize("prefetch_windows", [1, 2, 4]) +def test_arrow_rs_s3_window_prefetch_order(s3_fs, s3_path, prefetch_windows): + """The window-prefetch pipeline (K=1 single stream, many fetch windows) must + return rows in EXACT file order at every prefetch depth. This is the common S3 + path the knob targets: one row group sliced into many small windows, with up to + ``prefetch_windows`` of them fetching+decoding concurrently. depth=1 is the old + strictly-serial behavior; depth>1 overlaps window N+1's fetch with window N's + decode. A monotone ``id`` makes any window mis-ordering a hard failure, so this + guards that the concurrent look-ahead never lets a later window's rows overtake + an earlier one's. + """ + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + _s3_config, + ) + + n = 50_000 + table = pa.table({"id": pa.array(np.arange(n, dtype=np.int64))}) + _s3_write(table, s3_fs, s3_path, name="mono_pf.parquet") + + base = _unwrap_protocol(s3_path) + bucket, _, key = os.path.join(base, "mono_pf.parquet").partition("/") + cfg = _s3_config(s3_fs) + + stream = ray_data_arrow_rs.read_row_groups_s3( + bucket, + key, + cfg["region"], + cfg["anonymous"], + endpoint=cfg["endpoint"], + access_key_id=cfg["access_key_id"], + secret_access_key=cfg["secret_access_key"], + session_token=cfg["session_token"], + allow_http=cfg["allow_http"], + virtual_hosted_style=cfg["virtual_hosted_style"], + row_groups=[0], + columns=["id"], + batch_size=4096, + fetch_window_mb=1, # force many sub-windows within the single stream + k=1, # single stream: isolate the prefetch pipeline from K-split + prefetch_windows=prefetch_windows, + ) + got = pa.RecordBatchReader.from_stream(stream).read_all() + assert got.num_rows == n + assert got["id"].to_pylist() == list(range(n)) + + +def test_arrow_rs_s3_struct_parity(s3_fs, s3_path, restore_ctx): + """A struct column over S3 decodes natively (the gate admits struct now, + on S3 exactly as it does locally) and stays byte-identical to PyArrow.""" + table = pa.table( + { + "id": pa.array(np.arange(2000, dtype=np.int64)), + "st": pa.StructArray.from_arrays( + [pa.array(np.arange(2000)), pa.array(np.arange(2000) * 0.5)], + names=["a", "b"], + ), + } + ) + uri = _s3_write(table, s3_fs, s3_path, name="struct.parquet") + + restore_ctx.use_arrow_rs_parquet_reader = False + pa_tbl = pa.Table.from_pandas( + ray.data.read_parquet(uri, filesystem=s3_fs).to_pandas() + ).sort_by("id") + restore_ctx.use_arrow_rs_parquet_reader = True + rs_tbl = pa.Table.from_pandas( + ray.data.read_parquet(uri, filesystem=s3_fs).to_pandas() + ).sort_by("id") + assert pa_tbl.equals(rs_tbl) + + +@pytest.mark.parametrize( + "target_chunk_size", + [0, 6_000, 11_000, 10 * 1024**3], + ids=["one_rg_per_chunk", "bundle_pairs_a", "bundle_pairs_b", "whole_file"], +) +def test_chunker_native_metadata_matches_pyarrow( + tmp_path, restore_ctx, target_chunk_size +): + """Step 3: with the arrow-rs flag on, ``ParquetFileChunker`` reads the footer + through the native crate instead of PyArrow. The crate's + ``row_group_compressed_sizes`` equals PyArrow's ``sum(col.total_compressed_size)``, + so the greedy row-group bundling produces byte-for-byte identical chunk ranges + *and* chunk sizes whether the flag is on or off.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.chunkers.file_chunker import ( + ParquetFileChunker, + ) + + path = tmp_path / "data.parquet" + table = _flat_table(num_rows=4_000) + pq.write_table(table, str(path), write_page_index=True, row_group_size=1_000) + size = path.stat().st_size + fs = LocalFileSystem() + + def chunks_for(use_arrow_rs): + restore_ctx.use_arrow_rs_parquet_reader = use_arrow_rs + chunker = ParquetFileChunker(target_chunk_size=target_chunk_size) + return [ + (m["row_group_start"], m["row_group_end"], sz) + for m, sz in chunker.generate_chunk_metadatas(str(path), size, fs) + ] + + assert chunks_for(True) == chunks_for(False) + + +def test_chunker_native_metadata_makes_no_pyarrow_footer_read(tmp_path, restore_ctx): + """With the flag on, the chunker must not touch PyArrow's ``read_metadata`` — + the whole supported-file footer read goes through the arrow-rs crate.""" + import pyarrow.parquet as pqmod + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.chunkers.file_chunker import ( + ParquetFileChunker, + ) + + path = tmp_path / "data.parquet" + pq.write_table( + _flat_table(num_rows=4_000), + str(path), + write_page_index=True, + row_group_size=1_000, + ) + size = path.stat().st_size + fs = LocalFileSystem() + + calls = {"n": 0} + orig = pqmod.read_metadata + + def _spy(*args, **kwargs): + calls["n"] += 1 + return orig(*args, **kwargs) + + pqmod.read_metadata = _spy + try: + restore_ctx.use_arrow_rs_parquet_reader = True + list(ParquetFileChunker().generate_chunk_metadatas(str(path), size, fs)) + assert calls["n"] == 0, "flag ON must not call pyarrow.parquet.read_metadata" + + restore_ctx.use_arrow_rs_parquet_reader = False + list(ParquetFileChunker().generate_chunk_metadatas(str(path), size, fs)) + assert calls["n"] == 1, "flag OFF must use pyarrow.parquet.read_metadata" + finally: + pqmod.read_metadata = orig + + +def _write_int96(path, embed_arrow_schema): + """Write a Parquet file storing the timestamp column as the legacy INT96 + physical type. ``embed_arrow_schema=False`` mimics Spark/Hive/Impala (no + embedded Arrow schema); ``True`` mimics a PyArrow writer, which pins the + source ``timestamp[us]`` unit in the file's key-value metadata.""" + import datetime + + ts = pa.array( + [ + datetime.datetime(2021, 6, 1) + datetime.timedelta(minutes=i) + for i in range(2000) + ], + type=pa.timestamp("us"), + ) + table = pa.table({"id": pa.array(np.arange(2000, dtype=np.int64)), "t": ts}) + pq.write_table( + table, + str(path), + use_deprecated_int96_timestamps=True, + store_schema=embed_arrow_schema, + write_page_index=True, + ) + return table + + +def _read_manifest_with_path_verdict(path, monkeypatch): + """Drive ``ArrowRsParquetFileReader.read`` in-process over a whole-file + manifest and report ``(table, took_native_decode)``. + + In-process (not via ``ray.data.read_parquet``) so the crate/pyarrow spies + actually observe the decode — Ray would run it in a worker where a + driver-side monkeypatch is invisible. ``took_native_decode`` is True iff the + crate's ``read_row_groups`` ran (the file took the native path); a fallback + instead opens the file via ``pyarrow.dataset.dataset``.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + calls = {"read_row_groups": 0} + orig = ray_data_arrow_rs.read_row_groups + + def spy(*a, **k): + calls["read_row_groups"] += 1 + return orig(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", spy) + + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), target_block_size=128 * 1024 * 1024 + ) + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + table = pa.concat_tables(list(reader.read(manifest))).sort_by("id") + return table, calls["read_row_groups"] > 0 + + +def test_int96_no_arrow_hint_reads_native_as_ns(tmp_path, restore_ctx, monkeypatch): + """A Spark/Hive/Impala-style INT96 file (no embedded Arrow schema) decodes to + ``timestamp[ns]`` on both paths, so the crate handles it *natively* and stays + byte-identical to PyArrow — bringing the common INT96 case onto the + memory-efficient native path.""" + path = tmp_path / "spark_int96.parquet" + _write_int96(path, embed_arrow_schema=False) + + # The crate's footer read reports the column as INT96 and decodes it to ns. + md = ray_data_arrow_rs.read_metadata(str(path)) + assert "t" in list(md.int96_columns) + assert pa.schema(md).field("t").type == pa.timestamp("ns") + + rs_tbl, took_native = _read_manifest_with_path_verdict(path, monkeypatch) + pa_tbl = pa.Table.from_pandas(ray.data.read_parquet(str(path)).to_pandas()).sort_by( + "id" + ) + + assert took_native, "INT96/ns file should take the native decode path" + assert rs_tbl.schema.field("t").type == pa.timestamp("ns") + assert pa_tbl.equals(rs_tbl) + + +def test_int96_with_non_ns_hint_realigns_natively(tmp_path, restore_ctx, monkeypatch): + """A PyArrow-written INT96 file embeds a ``timestamp[us]`` hint that the crate + honors (→ us) but PyArrow ignores (always ns). The planned native path stays + native and *realigns*: the plan-time ``_ColumnAlignment`` casts the decoded + column to ``ns`` so the result is byte-identical to PyArrow — no fallback.""" + path = tmp_path / "pyarrow_int96.parquet" + _write_int96(path, embed_arrow_schema=True) + + # Crate decodes to us (honoring the embedded hint) — the divergence the + # alignment cast repairs. + assert pa.schema(ray_data_arrow_rs.read_metadata(str(path))).field( + "t" + ).type == pa.timestamp("us") + + rs_tbl, took_native = _read_manifest_with_path_verdict(path, monkeypatch) + pa_tbl = pa.Table.from_pandas(ray.data.read_parquet(str(path)).to_pandas()).sort_by( + "id" + ) + + assert took_native, "INT96/non-ns-hint file should decode natively + realign" + assert rs_tbl.schema.field("t").type == pa.timestamp("ns") + assert pa_tbl.equals(rs_tbl) + + +def test_int96_gate_rejects_non_ns_in_columns_supported(tmp_path): + """Unit-level: ``_columns_supported`` (the per-fragment re-gate, which + requires a *no-op* alignment) stays True for an INT96 column already at + ns/no-tz and False for a non-ns unit — the latter now means "needs an + alignment cast", which the planned ``read()`` handles natively while the + pyarrow-fragment path conservatively falls back.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + reader = ArrowRsParquetFileReader(filesystem=LocalFileSystem()) + ns_schema = pa.schema([("id", pa.int64()), ("t", pa.timestamp("ns"))]) + us_schema = pa.schema([("id", pa.int64()), ("t", pa.timestamp("us"))]) + + # 't' flagged as INT96: ns is admitted, us (non-ns) is rejected. + assert reader._columns_supported(ns_schema, ["id", "t"], ["t"]) is True + assert reader._columns_supported(us_schema, ["id", "t"], ["t"]) is False + # A genuine (non-INT96) timestamp[us] column stays supported — only INT96 + # columns are unit-gated. + assert reader._columns_supported(us_schema, ["id", "t"], []) is True + # Projecting away the INT96 column sidesteps the gate. + assert reader._columns_supported(us_schema, ["id"], ["t"]) is True + + +# --------------------------------------------------------------------------- +# Column alignment: gates closed by the per-file post-decode fixup plan +# (schema-evolution null-fill, unified-schema cast, INT96 coercion, forced +# dictionary_columns). Each test compares the native reader against the base +# PyArrow reader IN-PROCESS over the same manifest, with a crate spy proving +# the native decode actually ran (no silent fallback). +# --------------------------------------------------------------------------- + + +def _read_both_in_process(paths, monkeypatch, **reader_kwargs): + """Read ``paths`` with the arrow-rs reader and the base PyArrow reader over + an identical whole-file manifest; return ``(rs_table, pa_table, + native_decodes)`` where ``native_decodes`` counts crate decode calls.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + from ray.data._internal.datasource_v2.readers.parquet_file_reader import ( + ParquetFileReader, + ) + + calls = {"decode": 0} + orig = ray_data_arrow_rs.read_row_groups + + def spy(*a, **k): + calls["decode"] += 1 + return orig(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", spy) + + paths = [str(p) for p in paths] + manifest = _make_manifest( + paths, [os.path.getsize(p) for p in paths], [None] * len(paths) + ) + rs = pa.concat_tables( + list( + ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), **reader_kwargs + ).read(manifest) + ) + ) + pa_tbl = pa.concat_tables( + list( + ParquetFileReader(filesystem=LocalFileSystem(), **reader_kwargs).read( + manifest + ) + ) + ) + return rs, pa_tbl, calls["decode"] + + +def _evolved_fixture(tmp_path): + """Two-file dataset with schema evolution: file A has (id, x, s[large]); + file B lacks ``x`` and stores ``s`` as plain ``string`` (type drift). The + unified schema is A's.""" + a = tmp_path / "evo_a.parquet" + b = tmp_path / "evo_b.parquet" + pq.write_table( + pa.table( + { + "id": pa.array([1, 2], pa.int64()), + "x": pa.array([1.5, 2.5], pa.float64()), + "s": pa.array(["a", "b"], pa.large_string()), + } + ), + str(a), + write_page_index=True, + ) + pq.write_table( + pa.table( + { + "id": pa.array([3, 4], pa.int64()), + "s": pa.array(["c", "d"], pa.string()), + } + ), + str(b), + write_page_index=True, + ) + unified = pa.schema( + [("id", pa.int64()), ("x", pa.float64()), ("s", pa.large_string())] + ) + return a, b, unified + + +def test_schema_evolution_null_fill_native_parity(tmp_path, monkeypatch): + """A file missing a unified-schema column (schema evolution) plus per-file + type drift decodes NATIVELY: the alignment null-fills the missing column + with the unified type and casts the drifted one, byte-matching PyArrow's + pinned-schema scan. Both files must take the crate path.""" + a, b, unified = _evolved_fixture(tmp_path) + + rs, pa_tbl, native_decodes = _read_both_in_process( + [a, b], monkeypatch, schema=unified + ) + assert native_decodes >= 2, "both files should decode natively" + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + assert rs.schema == pa_tbl.schema + + # Same with an explicit projection that includes the evolved column. + rs, pa_tbl, native_decodes = _read_both_in_process( + [a, b], monkeypatch, schema=unified, columns=["x", "id"] + ) + assert native_decodes >= 2 + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + + +def test_filter_on_evolved_column_native_parity(tmp_path, monkeypatch): + """A pushed predicate over the null-filled (evolved) column evaluates on + the ALIGNED batch, so rows from the file lacking the column drop exactly + like PyArrow's null-comparison semantics.""" + from ray.data.expressions import col + + a, b, unified = _evolved_fixture(tmp_path) + rs, pa_tbl, native_decodes = _read_both_in_process( + [a, b], monkeypatch, schema=unified, predicate=(col("x") > 2.0) + ) + assert native_decodes >= 1 + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + assert rs.num_rows == 1 # only id=2 (x=2.5) survives; file B is all-null x + + +def test_coerce_int96_timestamp_unit_falls_back(tmp_path, monkeypatch): + """A file decoding INT96 under ``coerce_int96_timestamp_unit`` FALLS BACK + (with or without an embedded arrow-schema hint): pyarrow's decode-time + coercion floors (parquet types.h divides the unsigned nanos-of-day) while + a post-decode cast truncates toward zero — one unit apart on every + pre-1970 value, so no cast reproduces the kwarg. Parity still holds + because the fallback IS pyarrow for that file.""" + for embed in (False, True): + path = tmp_path / f"i96_{embed}.parquet" + _write_int96(path, embed_arrow_schema=embed) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={"coerce_int96_timestamp_unit": "ms"}, + ) + assert native_decodes == 0, f"embed={embed} must fall back under the kwarg" + assert rs.schema.field("t").type == pa.timestamp("ms") + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + + +def test_forced_dictionary_columns_native_parity(tmp_path, monkeypatch): + """A forced ``dictionary_columns`` read no longer falls back: the crate + decodes the plain column and the alignment dictionary-casts it to exactly + PyArrow's forced-dict output (``dictionary``).""" + path = tmp_path / "forced_dict.parquet" + pq.write_table( + pa.table( + { + "id": pa.array([1, 2, 3], pa.int64()), + "s": pa.array(["x", "y", "x"]), + } + ), + str(path), + write_page_index=True, + ) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], monkeypatch, parquet_format_kwargs={"dictionary_columns": ["s"]} + ) + assert native_decodes >= 1 + assert rs.schema.field("s").type == pa.dictionary(pa.int32(), pa.string()) + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + + +def test_dotted_nested_projection_native_parity(tmp_path, monkeypatch): + """Dotted (nested-field) projection like ``user.name`` stays NATIVE and + matches the base reader exactly — which today means the dotted column is + silently DROPPED by both paths. + + V2 discards dotted names *before* any reader sees them: + ``FileReader._split_columns`` classifies ``user.name`` as not-on-disk (the + footer schema has only the root ``user``), routing it to the synthesize + bucket, where nothing synthesizes it and ``_postprocess`` drops it. The raw + PyArrow scanner *could* resolve it (yielding a leaf column named ``name``), + but Ray never passes it through. So true nested projection is a platform + feature V2 lacks on the PyArrow path too — implementing a Rust + ``ProjectionMask`` for it would be new functionality, not migration parity. + This test pins the parity: no fallback, identical (dropped-column) output. + """ + path = tmp_path / "nested_proj.parquet" + pq.write_table( + pa.table( + { + "id": pa.array([1, 2], pa.int64()), + "user": pa.array( + [{"name": "a", "age": 30}, {"name": "b", "age": 40}], + type=pa.struct([("name", pa.string()), ("age", pa.int64())]), + ), + } + ), + str(path), + write_page_index=True, + ) + + # Dotted projection: native decode, and both readers drop the dotted name. + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], monkeypatch, columns=["user.name", "id"] + ) + assert native_decodes >= 1, "dotted projection must not force a fallback" + assert rs.column_names == ["id"] + assert rs.equals(pa_tbl) + + # Whole-struct projection (the supported way to read nested data): native + # decode with full byte parity. + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], monkeypatch, columns=["user", "id"] + ) + assert native_decodes >= 1 + assert rs.column_names == ["user", "id"] + assert rs.equals(pa_tbl) + + +def test_flat_column_named_with_dot_native_parity(tmp_path, monkeypatch): + """A FLAT top-level column literally named ``"user.name"`` (legal in + Parquet) decodes natively with parity — even when the same file also has a + struct ``user`` with a ``name`` child. Exact flat-name match wins in both + the pyarrow scanner and the crate, so the gate must not fall back on a + dot in a column name (dots only ever mean nested *projection* upstream of + the reader, where V2 discards them).""" + path = tmp_path / "flatdot.parquet" + pq.write_table( + pa.table( + { + "id": pa.array([1, 2], pa.int64()), + "user.name": pa.array(["flat1", "flat2"]), + "user": pa.array( + [{"name": "nested1"}, {"name": "nested2"}], + type=pa.struct([("name", pa.string())]), + ), + } + ), + str(path), + write_page_index=True, + ) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], monkeypatch, columns=["user.name", "id"] + ) + assert native_decodes >= 1, "flat dotted-named column must decode natively" + assert rs.column_names == ["user.name", "id"] + assert rs.column("user.name").to_pylist() == ["flat1", "flat2"] + assert rs.equals(pa_tbl) + + +def test_perf_only_format_kwargs_stay_native(tmp_path, monkeypatch): + """I/O-tuning format kwargs (``pre_buffer`` / ``buffer_size`` / + ``use_buffered_stream``) cannot change decoded bytes, so the native path + ignores them and stays native; the PyArrow reader honors them and must + produce identical output.""" + path = tmp_path / "perf_kwargs.parquet" + pq.write_table( + pa.table( + { + "id": pa.array([1, 2, 3], pa.int64()), + "s": pa.array(["a", "b", "c"]), + } + ), + str(path), + write_page_index=True, + ) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={ + "pre_buffer": False, + "buffer_size": 64 * 1024, + "use_buffered_stream": True, + }, + ) + assert native_decodes >= 1, "perf-only format kwargs must not force fallback" + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + + +def test_unsupported_format_kwarg_falls_back(tmp_path, monkeypatch): + """A format kwarg outside the native allowlist forces a PyArrow fallback + (which honors it) instead of being silently ignored. Exercised with + ``arrow_extensions_enabled`` — a pyarrow 21+ schema-shaping toggle the + native path doesn't reproduce (see TODO.md "arrow_extensions_enabled").""" + path = tmp_path / "audit_kwargs.parquet" + pq.write_table( + pa.table({"id": pa.array([1, 2], pa.int64())}), str(path), write_page_index=True + ) + + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={"arrow_extensions_enabled": True}, + ) + assert native_decodes == 0, "unsupported format kwarg must force fallback" + assert rs.equals(pa_tbl) + + +def test_strict_mode_raises_on_fallback_and_passes_native(tmp_path, monkeypatch): + """``RAY_DATA_ARROW_RS_STRICT`` turns every decision to serve a read via + the PyArrow fallback into a hard error — so a large-scale validation run + can *guarantee* it exercised the native path — while leaving natively + supported reads untouched.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + path = tmp_path / "strict.parquet" + pq.write_table( + pa.table({"id": pa.array([1, 2], pa.int64())}), str(path), write_page_index=True + ) + monkeypatch.setenv("RAY_DATA_ARROW_RS_STRICT", "1") + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + + # Native-supported read: strict mode is a no-op. + table = pa.concat_tables( + list(ArrowRsParquetFileReader(filesystem=LocalFileSystem()).read(manifest)) + ) + assert table["id"].to_pylist() == [1, 2] + + # Fallback-forcing read (format kwarg outside the allowlist): raises + # instead of silently serving PyArrow-decoded bytes. + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), + parquet_format_kwargs={"arrow_extensions_enabled": True}, + ) + with pytest.raises(RuntimeError, match="RAY_DATA_ARROW_RS_STRICT"): + list(reader.read(manifest)) + + # Per-file gate (no plannable alignment): a file whose read requires an + # unsupported read-time coercion also raises under strict mode. + reader = ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), + parquet_format_kwargs={"dictionary_columns": ["id"]}, + schema=pa.schema([("id", pa.dictionary(pa.int32(), pa.int64()))]), + ) + try: + got = list(reader.read(manifest)) + except RuntimeError as e: + assert "RAY_DATA_ARROW_RS_STRICT" in str(e) + else: + # If the alignment can plan this coercion it stays native — equally + # acceptable; the point is "never a silent fallback under strict". + assert got + + +def test_thrift_limits_native_parity(tmp_path, monkeypatch): + """The thrift footer limits stay NATIVE via the metadata-only pyarrow + footer probe: a generous limit decodes natively with identical output, + and a tiny limit raises the same ``OSError`` the base path raises + (parity-of-error) — from both readers, not just the fallback.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.parquet_file_reader import ( + ParquetFileReader, + ) + + path = tmp_path / "thrift_limits.parquet" + pq.write_table( + pa.table({"id": pa.array([1, 2], pa.int64())}), str(path), write_page_index=True + ) + + # Generous limit: the probe passes and the decode is native. + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={"thrift_string_size_limit": 1 << 20}, + ) + assert native_decodes >= 1, "thrift limits must not force fallback anymore" + assert rs.equals(pa_tbl) + + # Tiny limit: both readers must reject the footer with the same error. + tiny = {"thrift_string_size_limit": 10} + manifest = _make_manifest([str(path)], [os.path.getsize(path)], [None]) + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + + with pytest.raises(OSError): + list( + ArrowRsParquetFileReader( + filesystem=LocalFileSystem(), parquet_format_kwargs=dict(tiny) + ).read(manifest) + ) + with pytest.raises(OSError): + list( + ParquetFileReader( + filesystem=LocalFileSystem(), parquet_format_kwargs=dict(tiny) + ).read(manifest) + ) + + +def _write_crc_file(path, corrupt=False): + """Write an uncompressed file with page checksums; optionally flip one + byte inside a data page (detectable only via CRC verification).""" + table = pa.table( + { + "id": pa.array(range(100), pa.int64()), + "s": pa.array([f"crc_sentinel_{i:04d}" for i in range(100)]), + } + ) + pq.write_table( + table, + str(path), + write_page_index=True, + compression="NONE", + write_page_checksum=True, + ) + if corrupt: + data = bytearray(path.read_bytes()) + idx = data.find(b"crc_sentinel_0050") + assert idx > 0 + data[idx] = ord("X") + path.write_bytes(bytes(data)) + return table + + +def test_page_checksum_verification_true_native(tmp_path, monkeypatch): + """``page_checksum_verification=True`` decodes natively: the crate is + built with parquet's ``crc`` feature and always verifies stored page + CRCs, so True *is* the native behavior — clean files match byte-for-byte, + and a corrupt page raises from BOTH readers (parity-of-error).""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + from ray.data._internal.datasource_v2.readers.parquet_file_reader import ( + ParquetFileReader, + ) + + clean = tmp_path / "crc_clean.parquet" + _write_crc_file(clean) + rs, pa_tbl, native_decodes = _read_both_in_process( + [clean], + monkeypatch, + parquet_format_kwargs={"page_checksum_verification": True}, + ) + assert native_decodes >= 1, "page_checksum_verification=True must stay native" + assert rs.equals(pa_tbl) + + corrupt = tmp_path / "crc_corrupt.parquet" + _write_crc_file(corrupt, corrupt=True) + manifest = _make_manifest([str(corrupt)], [os.path.getsize(corrupt)], [None]) + kwargs = {"page_checksum_verification": True} + for reader_cls in (ArrowRsParquetFileReader, ParquetFileReader): + with pytest.raises((OSError, pa.lib.ArrowInvalid), match="CRC"): + list( + reader_cls( + filesystem=LocalFileSystem(), parquet_format_kwargs=dict(kwargs) + ).read(manifest) + ) + + +def test_page_checksum_verification_false_falls_back(tmp_path, monkeypatch): + """An explicit ``page_checksum_verification=False`` is the opt-out for + reading a file *despite* corrupt checksums. The crate build always + verifies (compile-time ``crc`` feature, no off-switch), so only PyArrow + can honor the opt-out — the read must fall back and succeed, returning + the same (corrupted) bytes from both paths.""" + path = tmp_path / "crc_optout.parquet" + _write_crc_file(path, corrupt=True) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={"page_checksum_verification": False}, + ) + assert native_decodes == 0, "explicit False must force the PyArrow fallback" + assert rs.equals(pa_tbl) + # The corruption is really there — the flipped byte comes through. + assert rs["s"][50].as_py() == "Xrc_sentinel_0050" + + +def _schema_shaped_fixture(tmp_path): + """A file WITHOUT an embedded arrow schema (``store_schema=False``), so + ``binary_type`` / ``list_type`` genuinely change pyarrow's decoded types + (with an embedded schema they are inert).""" + path = tmp_path / "schema_shaped.parquet" + pq.write_table( + pa.table( + { + "id": pa.array([1, 2], pa.int64()), + "b": pa.array([b"x", b"y"], pa.binary()), + "l": pa.array([[1, 2], [3]], pa.list_(pa.int64())), + "s": pa.array(["a", "bb"], pa.string()), + } + ), + str(path), + write_page_index=True, + store_schema=False, + ) + return path + + +def test_schema_shaped_kwargs_native_with_pinned_schema(tmp_path, monkeypatch): + """``binary_type`` / ``list_type`` with a pinned dataset schema decode + natively: the pin is the output-type authority — on the base path the + pinned-schema cast silently *undoes* these kwargs (the V2 listing infers + the schema via ``pq.read_schema``, which is blind to them), and the + native path's alignment produces the pinned types identically.""" + path = _schema_shaped_fixture(tmp_path) + unified = pq.read_schema(str(path)) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + schema=unified, + parquet_format_kwargs={ + "binary_type": pa.large_binary(), + "list_type": pa.LargeListType, + }, + ) + assert native_decodes >= 1, "pinned-schema read must stay native" + assert rs.equals(pa_tbl) + # The pin wins: output types are the plain (non-large) footer types. + assert rs.schema.field("b").type == pa.binary() + assert rs.schema.field("s").type == pa.string() + + +def test_schema_shaped_kwargs_fall_back_without_schema(tmp_path, monkeypatch): + """Without a pinned schema, ``binary_type`` / ``list_type`` genuinely + change the decoded types (large_binary / large_string / large_list on a + no-embedded-schema file) — the crate doesn't reproduce that, so the read + falls back to PyArrow and both paths agree on the large types.""" + path = _schema_shaped_fixture(tmp_path) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={ + "binary_type": pa.large_binary(), + "list_type": pa.LargeListType, + }, + ) + assert native_decodes == 0, "schema-shaping kwargs without a pin must fall back" + assert rs.equals(pa_tbl) + assert rs.schema.field("b").type == pa.large_binary() + assert rs.schema.field("s").type == pa.large_string() + assert rs.schema.field("l").type == pa.large_list(pa.int64()) + + +def test_arrow_rs_tuning_kwargs_reach_crate(tmp_path, monkeypatch): + """``arrow_rs_*`` tuning knobs in ``dataset_kwargs`` must (a) reach the + crate's decode call with the requested values, (b) keep the read native, + and (c) be ignored by the base PyArrow reader (popped before + ``pds.ParquetFileFormat`` sees them) — the mirror image of the native + reader ignoring ``pre_buffer``. The base reader reading the same kwargs + without a TypeError is assertion (c).""" + path = tmp_path / "tuning_kwargs.parquet" + table = _flat_table(10_000) + pq.write_table(table, str(path), write_page_index=True, row_group_size=10_000) + + # Capture the crate call args underneath the helper's own decode spy. + # Local signature (positional): (path, row_groups, columns, batch_size, + # decode_budget_bytes, k, split_threshold_bytes, predicate_json). + captured = [] + orig = ray_data_arrow_rs.read_row_groups + + def capture(*a, **k): + captured.append(a) + return orig(*a, **k) + + monkeypatch.setattr(ray_data_arrow_rs, "read_row_groups", capture) + + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={ + "arrow_rs_decode_budget_bytes": 4 * 1024 * 1024, + "arrow_rs_k": 2, + "arrow_rs_split_threshold_bytes": 0, # force the K-split path + }, + ) + assert native_decodes >= 1, "tuning kwargs must not force fallback" + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + assert captured, "crate decode call was not captured" + for args in captured: + assert args[4] == 4 * 1024 * 1024 # decode_budget_bytes + assert args[5] == 2 # k + assert args[6] == 0 # split_threshold_bytes + + +def test_arrow_rs_tuning_kwarg_typo_raises(tmp_path): + """A misspelled ``arrow_rs_*`` key must fail loudly at reader construction + (both readers share the check in ``ParquetFileReader.__init__``), not + surface as a baffling pyarrow TypeError or a silent native fallback.""" + from pyarrow.fs import LocalFileSystem + + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( + ArrowRsParquetFileReader, + ) + from ray.data._internal.datasource_v2.readers.parquet_file_reader import ( + ParquetFileReader, + ) + + for reader_cls in (ArrowRsParquetFileReader, ParquetFileReader): + with pytest.raises(ValueError, match="arrow_rs_decode_budget"): + reader_cls( + filesystem=LocalFileSystem(), + parquet_format_kwargs={"arrow_rs_decode_budget": 1}, # typo'd key + ) + + +@pytest.mark.parametrize("bad_value", [0, "four", True]) +def test_arrow_rs_tuning_kwarg_invalid_value_raises(tmp_path, monkeypatch, bad_value): + """An invalid tuning value (wrong type, below minimum, or a bool sneaking + in as int) must raise a ValueError naming the knob — a mis-set perf knob + silently clamped or ignored would corrupt benchmarks.""" + path = tmp_path / "bad_tuning.parquet" + pq.write_table( + pa.table({"id": pa.array([1, 2], pa.int64())}), str(path), write_page_index=True + ) + with pytest.raises(ValueError, match="arrow_rs_k"): + _read_both_in_process( + [path], + monkeypatch, + parquet_format_kwargs={"arrow_rs_k": bad_value}, + ) + + +def test_arrow_rs_tuning_kwargs_end_to_end(tmp_path, restore_ctx): + """The knobs survive the full ``read_parquet(dataset_kwargs=...)`` plumbing + (read_api -> datasource -> scanner -> reader) under BOTH flag settings: + natively they tune the crate; on the PyArrow reader they're inert — the + same call is valid either way.""" + path = tmp_path / "tuning_e2e.parquet" + table = _flat_table(5_000) + pq.write_table(table, str(path), write_page_index=True) + + kwargs = {"dataset_kwargs": {"arrow_rs_decode_budget_bytes": 4 * 1024 * 1024}} + pa_tbl = _read_sorted(path, False, restore_ctx, **kwargs) + rs_tbl = _read_sorted(path, True, restore_ctx, **kwargs) + assert pa_tbl.equals(rs_tbl) + assert rs_tbl.num_rows == table.num_rows + + +def test_unified_only_column_not_dropped_natively(tmp_path, monkeypatch): + """A unified-schema column absent from EVERY file in the split must still + surface (all-null), matching the base reader under a pinned schema — the + column split takes names from the unified schema, not the footers.""" + path = tmp_path / "no_extra.parquet" + pq.write_table( + pa.table({"id": pa.array([1, 2], pa.int64())}), str(path), write_page_index=True + ) + unified = pa.schema([("id", pa.int64()), ("later_col", pa.string())]) + rs, pa_tbl, native_decodes = _read_both_in_process( + [path], monkeypatch, schema=unified + ) + assert native_decodes >= 1 + assert "later_col" in rs.column_names + assert rs.sort_by("id").equals(pa_tbl.sort_by("id")) + + +if __name__ == "__main__": + import sys + + sys.exit(pytest.main(["-v", __file__])) From ee413125edac543a38eeaf5b068a1d1346b55262 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Wed, 29 Jul 2026 16:59:28 -0700 Subject: [PATCH 025/135] [Data] arrow-rs Parquet reader: address review + fix import ordering Review fixes: - predicate.rs: mixed int/float comparison returns None (incomparable, keep the row group) when the integer is outside f64's exactly- representable range, so a precision-lossy promotion can't wrongly prune a matching row group. - lib.rs: release the GIL (py.allow_threads) around blocking footer / metadata I/O in read_row_groups, read_row_groups_s3, read_metadata, read_metadata_s3, and select_row_groups so Ray's fragment-pool threads decode/fetch in parallel instead of serializing on the GIL. - native_metadata.py / arrow_rs reader: strip a leading "s3://" before the bucket/key split (defensive; pyarrow paths are scheme-less). - parquet_file_reader.py: restore the arrow_rs_* tuning-kwarg pop + validation in __init__ (dropped when the file was reconciled to upstream) so ArrowRsParquetFileReader._tuning works and typo'd knobs raise a clear ValueError. - arrow_rs reader: _filesystem_supported now treats filesystem=None as the default local filesystem, matching the metadata/read paths, so eligible local reads no longer silently fall back to PyArrow. Lint: apply ruff import-ordering fixes in the reader and its test. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/src/lib.rs | 108 +++++++++++------- .../native/ray_data_arrow_rs/src/predicate.rs | 19 ++- .../datasource_v2/native_metadata.py | 5 + .../readers/arrow_rs_parquet_file_reader.py | 21 +++- .../readers/parquet_file_reader.py | 42 ++++++- .../test_arrow_rs_parquet_reader.py | 3 +- 6 files changed, 148 insertions(+), 50 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs index 885e6ca88b19..f762170d4c0c 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -682,6 +682,7 @@ fn open_local_reader( #[pyo3(signature = (path, row_groups=None, columns=None, batch_size=131072, decode_budget_bytes=2*1024*1024, k=1, split_threshold_bytes=134217728, predicate_json=None))] #[allow(clippy::too_many_arguments)] fn read_row_groups( + py: Python<'_>, path: String, row_groups: Option>, columns: Option>, @@ -694,17 +695,22 @@ fn read_row_groups( // in Python post-decode, so this only avoids IO/decode, never changes rows. predicate_json: Option, ) -> PyResult { - let reader = open_local_reader( - path, - row_groups, - columns, - batch_size, - decode_budget_bytes, - k, - split_threshold_bytes, - predicate_json, - ) - .map_err(to_py)?; + // Footer read + reader construction is blocking file I/O; release the GIL so + // sibling Python read threads (Ray's fragment pool) run in parallel. + let reader = py + .allow_threads(|| { + open_local_reader( + path, + row_groups, + columns, + batch_size, + decode_budget_bytes, + k, + split_threshold_bytes, + predicate_json, + ) + }) + .map_err(to_py)?; Ok(into_py_stream(reader)) } @@ -974,6 +980,7 @@ fn build_s3_store( prefetch_windows=2, predicate_json=None))] #[allow(clippy::too_many_arguments)] fn read_row_groups_s3( + py: Python<'_>, bucket: String, key: String, region: String, @@ -1018,22 +1025,27 @@ fn read_row_groups_s3( // unselected pages by byte range), and build the projected output schema up // front from an empty stream (no network). Reporting the projected schema is // what keeps it matching the projected batches at the FFI boundary. - let (meta, mask, schema) = rt - .block_on(async { - let opts = reader_options(PageIndexPolicy::Optional); - let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); - let meta = ArrowReaderMetadata::load_async(&mut probe, opts).await?; - let mask = projection_mask(meta.metadata().file_metadata().schema_descr(), &columns); - let schema = ParquetRecordBatchStreamBuilder::new_with_metadata( - ParquetObjectReader::new(store.clone(), obj_path.clone()), - meta.clone(), - ) - .with_projection(mask.clone()) - .with_row_groups(vec![]) - .build()? - .schema() - .clone(); - Ok::<_, parquet::errors::ParquetError>((meta, mask, schema)) + // Blocking async footer fetch; release the GIL so sibling Python read + // threads (Ray's fragment pool) issue their own S3 requests in parallel. + let (meta, mask, schema) = py + .allow_threads(|| { + rt.block_on(async { + let opts = reader_options(PageIndexPolicy::Optional); + let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); + let meta = ArrowReaderMetadata::load_async(&mut probe, opts).await?; + let mask = + projection_mask(meta.metadata().file_metadata().schema_descr(), &columns); + let schema = ParquetRecordBatchStreamBuilder::new_with_metadata( + ParquetObjectReader::new(store.clone(), obj_path.clone()), + meta.clone(), + ) + .with_projection(mask.clone()) + .with_row_groups(vec![]) + .build()? + .schema() + .clone(); + Ok::<_, parquet::errors::ParquetError>((meta, mask, schema)) + }) }) .map_err(to_py)?; @@ -1118,10 +1130,14 @@ fn read_row_groups_s3( /// counts. Page index is skipped (not needed for metadata). Lets the Python reader /// stop building a PyArrow dataset to learn the schema / row-group layout. #[pyfunction] -fn read_metadata(path: String) -> PyResult { - let opts = reader_options(PageIndexPolicy::Skip); - let meta = - ArrowReaderMetadata::load(&File::open(&path).map_err(to_py)?, opts).map_err(to_py)?; +fn read_metadata(py: Python<'_>, path: String) -> PyResult { + // Blocking footer read; release the GIL for sibling Python threads. + let meta = py + .allow_threads(|| { + let opts = reader_options(PageIndexPolicy::Skip); + ArrowReaderMetadata::load(&File::open(&path)?, opts) + }) + .map_err(to_py)?; Ok(build_file_metadata(&meta)) } @@ -1133,6 +1149,7 @@ fn read_metadata(path: String) -> PyResult { virtual_hosted_style=false))] #[allow(clippy::too_many_arguments)] fn read_metadata_s3( + py: Python<'_>, bucket: String, key: String, region: String, @@ -1158,11 +1175,14 @@ fn read_metadata_s3( .map_err(to_py)?; let obj_path = ObjPath::from(key); let rt = shared_runtime(); - let meta = rt - .block_on(async { - let opts = reader_options(PageIndexPolicy::Skip); - let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); - ArrowReaderMetadata::load_async(&mut probe, opts).await + // Blocking async footer fetch; release the GIL for sibling Python threads. + let meta = py + .allow_threads(|| { + rt.block_on(async { + let opts = reader_options(PageIndexPolicy::Skip); + let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); + ArrowReaderMetadata::load_async(&mut probe, opts).await + }) }) .map_err(to_py)?; Ok(build_file_metadata(&meta)) @@ -1175,10 +1195,18 @@ fn read_metadata_s3( /// set up front. Page index is skipped (stats live in the footer). #[pyfunction] #[pyo3(signature = (path, predicate_json=None))] -fn select_row_groups(path: String, predicate_json: Option) -> PyResult> { - let opts = reader_options(PageIndexPolicy::Skip); - let meta = - ArrowReaderMetadata::load(&File::open(&path).map_err(to_py)?, opts).map_err(to_py)?; +fn select_row_groups( + py: Python<'_>, + path: String, + predicate_json: Option, +) -> PyResult> { + // Blocking footer read; release the GIL for sibling Python threads. + let meta = py + .allow_threads(|| { + let opts = reader_options(PageIndexPolicy::Skip); + ArrowReaderMetadata::load(&File::open(&path)?, opts) + }) + .map_err(to_py)?; let all: Vec = (0..meta.metadata().num_row_groups()).collect(); Ok(apply_predicate(&meta, all, &predicate_json)) } diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs index 3f26610a3f37..7321d3309a7d 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/predicate.rs @@ -46,12 +46,25 @@ impl Value { /// null operands, and any cross-type pair that isn't int/float — every such /// case makes the caller keep the row group. pub fn partial_cmp(&self, other: &Value) -> Option { + // Integers with |v| above this lose precision when promoted to f64 + // (f64 has a 53-bit mantissa), so a mixed int/float comparison could + // silently flip. Treat those as incomparable (None) instead — the + // caller keeps the row group, which is always sound. + const MAX_SAFE_INT: i64 = 9_007_199_254_740_991; // 2^53 - 1 + const MIN_SAFE_INT: i64 = -9_007_199_254_740_991; + let in_safe_range = |v: i64| (MIN_SAFE_INT..=MAX_SAFE_INT).contains(&v); match (self, other) { (Value::Int(a), Value::Int(b)) => Some(a.cmp(b)), (Value::Float(a), Value::Float(b)) => a.partial_cmp(b), - // Mixed int/float: promote to f64 (e.g. `float_col > 5`). - (Value::Int(a), Value::Float(b)) => (*a as f64).partial_cmp(b), - (Value::Float(a), Value::Int(b)) => a.partial_cmp(&(*b as f64)), + // Mixed int/float: promote to f64 (e.g. `float_col > 5`), but only + // when the integer is exactly representable in f64. + (Value::Int(a), Value::Float(b)) if in_safe_range(*a) => { + (*a as f64).partial_cmp(b) + } + (Value::Float(a), Value::Int(b)) if in_safe_range(*b) => { + a.partial_cmp(&(*b as f64)) + } + (Value::Int(_), Value::Float(_)) | (Value::Float(_), Value::Int(_)) => None, (Value::Str(a), Value::Str(b)) => Some(a.cmp(b)), (Value::Bool(a), Value::Bool(b)) => Some(a.cmp(b)), _ => None, diff --git a/python/ray/data/_internal/datasource_v2/native_metadata.py b/python/ray/data/_internal/datasource_v2/native_metadata.py index 2e99ec267423..8d4146e27488 100644 --- a/python/ray/data/_internal/datasource_v2/native_metadata.py +++ b/python/ray/data/_internal/datasource_v2/native_metadata.py @@ -83,6 +83,11 @@ def read_native_metadata(path: str, filesystem: Optional["FileSystem"]): from pyarrow.fs import S3FileSystem if isinstance(filesystem, S3FileSystem): + # pyarrow filesystem paths are normally scheme-less ("bucket/key"), but + # strip a leading "s3://" defensively so we never split it into a bogus + # "s3:" bucket. + if path.startswith("s3://"): + path = path[len("s3://") :] bucket, _, key = path.partition("/") cfg = s3_config(filesystem) return ray_data_arrow_rs.read_metadata_s3( diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index 5e3156b165c6..15e54dc78556 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -112,13 +112,10 @@ from typing_extensions import override from ray._common.utils import env_integer -from ray.data._internal.object_extensions.arrow import ( - raise_on_pickle_object_columns, -) from ray.data._internal.datasource_v2.native_metadata import ( read_native_metadata as _read_native_metadata_via_crate, + s3_config as _s3_config, ) -from ray.data._internal.datasource_v2.native_metadata import s3_config as _s3_config from ray.data._internal.datasource_v2.readers.file_reader import ( _ARROW_DEFAULT_BATCH_SIZE, _ARROW_SCANNER_BATCH_READAHEAD, @@ -127,6 +124,9 @@ ParquetFileReader, _estimate_batch_size_from_metadata, ) +from ray.data._internal.object_extensions.arrow import ( + raise_on_pickle_object_columns, +) from ray.data._internal.util import MiB from ray.util.annotations import DeveloperAPI @@ -1025,7 +1025,13 @@ def _filesystem_supported(self) -> bool: filesystem (GCS, ABFS, HTTP, …) falls back to PyArrow.""" from pyarrow.fs import LocalFileSystem, S3FileSystem - return isinstance(self._filesystem, (LocalFileSystem, S3FileSystem)) + # ``None`` means the default local filesystem (matching + # ``native_metadata_supported_filesystem`` and the non-S3 native read + # path); treat it as supported so eligible local reads don't silently + # fall back to PyArrow. + return self._filesystem is None or isinstance( + self._filesystem, (LocalFileSystem, S3FileSystem) + ) def _blocking_format_kwargs(self, aligned_ok: bool) -> Dict[str, Any]: """Parquet-format kwargs (the ``dataset_kwargs`` payload spread into @@ -1410,6 +1416,11 @@ def _iter_native_tables( fs = self._filesystem if isinstance(fs, S3FileSystem): + # pyarrow filesystem paths are normally scheme-less ("bucket/key"), + # but strip a leading "s3://" defensively so we never split it into + # a bogus "s3:" bucket. + if path.startswith("s3://"): + path = path[len("s3://") :] bucket, _, key = path.partition("/") cfg = _s3_config(fs) reader = ray_data_arrow_rs.read_row_groups_s3( diff --git a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py index dd44fb728262..10a3b694a974 100644 --- a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py @@ -40,6 +40,24 @@ _UNSET = object() +# arrow-rs tuning knobs. These travel on the V2 ``dataset_kwargs`` payload (see +# ``arrow_rs_parquet_file_reader.py`` for semantics/defaults) but must never +# reach ``pds.ParquetFileFormat``, so ``__init__`` pops them out of +# ``parquet_format_kwargs`` before PyArrow can see them. The PyArrow reader then +# ignores them entirely — the mirror image of the native reader ignoring +# PyArrow's I/O-only kwargs — so a ``read_parquet`` call carrying these keys +# stays valid whichever reader the ``use_arrow_rs_parquet_reader`` flag selects. +ARROW_RS_TUNING_KWARGS = frozenset( + { + "arrow_rs_decode_budget_bytes", + "arrow_rs_k", + "arrow_rs_split_threshold_bytes", + "arrow_rs_fetch_window_mb", + "arrow_rs_prefetch_windows", + } +) +_ARROW_RS_KWARG_PREFIX = "arrow_rs_" + # Per-stream read-ahead buffer for ``use_buffered_stream=True``. PyArrow's # default (~8 KiB) produces many tiny range requests on S3; 8 MiB # amortizes per-request latency across meaningful payload sizes. @@ -247,7 +265,29 @@ def __init__( ) self._explicit_batch_size = batch_size self._target_block_size = target_block_size - self._parquet_format_kwargs: Dict[str, Any] = parquet_format_kwargs or {} + self._parquet_format_kwargs: Dict[str, Any] = dict(parquet_format_kwargs or {}) + # Split out the arrow-rs tuning knobs (see ARROW_RS_TUNING_KWARGS): they + # must never be spread into ``pds.ParquetFileFormat``. This base reader + # ignores them; ``ArrowRsParquetFileReader`` resolves them in + # ``_tuning``. An unrecognized ``arrow_rs_*`` key can only be a typo'd + # tuning knob — fail loudly here rather than let PyArrow raise a baffling + # ``ParquetFileFormat`` TypeError (or let the native gate treat it as an + # unsupported format kwarg and silently fall back). + self._arrow_rs_tuning: Dict[str, Any] = { + key: self._parquet_format_kwargs.pop(key) + for key in ARROW_RS_TUNING_KWARGS + if key in self._parquet_format_kwargs + } + unknown_arrow_rs_keys = sorted( + key + for key in self._parquet_format_kwargs + if key.startswith(_ARROW_RS_KWARG_PREFIX) + ) + if unknown_arrow_rs_keys: + raise ValueError( + f"Unknown arrow-rs tuning kwargs {unknown_arrow_rs_keys} in " + f"'dataset_kwargs'. Valid keys: {sorted(ARROW_RS_TUNING_KWARGS)}." + ) self._sampled_batch_size: int | object = ( _UNSET # pyrefly: ignore[bad-assignment] ) diff --git a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py index 7c907a083846..14fa03701cd6 100644 --- a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py +++ b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py @@ -701,10 +701,10 @@ def test_filter_pushdown_prunes_row_groups(tmp_path, restore_ctx): import pyarrow.dataset as pds from pyarrow.fs import LocalFileSystem - from ray.data.expressions import col from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( ArrowRsParquetFileReader, ) + from ray.data.expressions import col path = tmp_path / "sorted.parquet" n = 4000 @@ -1570,6 +1570,7 @@ def test_read_metadata_s3_matches_pyarrow(s3_fs, s3_path): recovery as the data path) and returns the same schema + row-group counts as PyArrow reading the same object.""" import ray_data_arrow_rs + from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( _s3_config, ) From 4607491b0d7b832d399955123a0dcfbadc0501a3 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Wed, 29 Jul 2026 17:22:38 -0700 Subject: [PATCH 026/135] [Data] arrow-rs pruning: only compare plain signed-int stats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stat_min_max mapped every INT32/INT64 page statistic to a signed Value::Int, ignoring the column's logical type. For a UINT_32/UINT_64 column, Parquet orders stats by unsigned comparison, so a value with the high bit set (e.g. u32 max) is stored as a negative i32/i64 and reads back inverting min/max — can_match could then prune a row group that actually contains matching rows, silently dropping data (the pruning layer's soundness contract is "never prune a group that might match"). DECIMAL (unscaled int != the decimal literal) and DATE/TIME/TIMESTAMP (encoding may not match the predicate literal) have the same hazard. Gate the INT32/INT64 arms on is_plain_signed_int(descr), which consults the ColumnDescriptor's logical/converted type and only allows genuine signed integers; everything else returns no bound (conservative keep). Adds Rust unit tests covering signed/unsigned/date cases. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/src/lib.rs | 127 ++++++++++++++++-- 1 file changed, 119 insertions(+), 8 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs index f762170d4c0c..ef848bebfaba 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -64,9 +64,10 @@ use std::sync::mpsc::{sync_channel, Receiver}; use std::thread; use crate::predicate::{can_match, ColStats, Pred, Value}; -use parquet::basic::Type as PhysicalType; +use parquet::basic::{ConvertedType, LogicalType, Type as PhysicalType}; use parquet::file::metadata::RowGroupMetaData; use parquet::file::statistics::Statistics; +use parquet::schema::types::ColumnDescriptor; use arrow::array::RecordBatch; use arrow::datatypes::SchemaRef; @@ -149,20 +150,52 @@ fn byte_budget_rows( // --------------------------------------------------------------------------- // // Row-group statistics pruning (predicate pushdown, part 1) // --------------------------------------------------------------------------- // +/// Whether an INT32/INT64 physical column is a *plain signed integer*, i.e. the +/// raw statistic value can be compared directly as a signed `i64`. Everything +/// else stored in an INT32/INT64 physical slot is rejected: +/// - UINT_8/16/32/64: Parquet orders these by *unsigned* comparison, so a +/// value ≥ 2^(bits-1) is stored with its high bit set and reads back as a +/// negative `i64` — min/max can invert (e.g. u32 max reads as -1). Comparing +/// as signed would prune row groups that actually match. +/// - DECIMAL: the stat is the *unscaled* integer, which doesn't match the +/// decimal literal a predicate carries. +/// - DATE / TIME / TIMESTAMP: the encoded units may not match the predicate +/// literal's encoding. +/// For any of these we return no bound → `can_match` keeps the row group. +fn is_plain_signed_int(descr: &ColumnDescriptor) -> bool { + match descr.logical_type_ref() { + Some(LogicalType::Integer(int)) => int.is_signed, + // Decimal / Date / Time / Timestamp / etc. on an int physical type. + Some(_) => false, + // Legacy files predate LogicalType; fall back to the converted type. + None => matches!( + descr.converted_type(), + ConvertedType::NONE + | ConvertedType::INT_8 + | ConvertedType::INT_16 + | ConvertedType::INT_32 + | ConvertedType::INT_64 + ), + } +} + /// Map one column chunk's Parquet statistics to `(min, max)` in `Value` terms. -/// Types we can't order for pruning (Int96, fixed-len byte arrays, non-UTF8 -/// byte arrays) return `None`, which `can_match` treats as "keep". -fn stat_min_max(stats: &Statistics) -> (Option, Option) { +/// Types we can't soundly order for pruning — Int96, fixed-len byte arrays, +/// non-UTF8 byte arrays, and INT32/INT64 columns that aren't plain signed +/// integers (unsigned / decimal / date-time; see [`is_plain_signed_int`]) — +/// return `None`, which `can_match` treats as "keep". `descr` supplies the +/// logical type that `Statistics` (keyed by physical type) can't. +fn stat_min_max(stats: &Statistics, descr: &ColumnDescriptor) -> (Option, Option) { match stats { Statistics::Boolean(v) => ( v.min_opt().map(|b| Value::Bool(*b)), v.max_opt().map(|b| Value::Bool(*b)), ), - Statistics::Int32(v) => ( + Statistics::Int32(v) if is_plain_signed_int(descr) => ( v.min_opt().map(|x| Value::Int(*x as i64)), v.max_opt().map(|x| Value::Int(*x as i64)), ), - Statistics::Int64(v) => ( + Statistics::Int64(v) if is_plain_signed_int(descr) => ( v.min_opt().map(|x| Value::Int(*x)), v.max_opt().map(|x| Value::Int(*x)), ), @@ -180,7 +213,8 @@ fn stat_min_max(stats: &Statistics) -> (Option, Option) { v.max_opt() .and_then(|b| b.as_utf8().ok().map(|s| Value::Str(s.to_string()))), ), - // Int96 (legacy timestamps) and FixedLenByteArray: not ordered here. + // Int96, FixedLenByteArray, and non-signed-int INT32/INT64 columns + // (guards above fell through): not ordered here → keep. _ => (None, None), } } @@ -195,7 +229,7 @@ fn row_group_col_stats(rg: &RowGroupMetaData) -> HashMap { for i in 0..rg.num_columns() { let col = rg.column(i); if let Some(stats) = col.statistics() { - let (min, max) = stat_min_max(stats); + let (min, max) = stat_min_max(stats, col.column_descr()); let null_count = stats.null_count_opt().map(|n| n as i64); map.insert( col.column_path().string(), @@ -1225,3 +1259,80 @@ fn ray_data_arrow_rs(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_class::()?; Ok(()) } + +#[cfg(test)] +mod tests { + use super::*; + use parquet::schema::types::{ColumnPath, Type}; + use std::sync::Arc; + + /// Build a leaf `ColumnDescriptor` for one physical/logical/converted type + /// combo (the only inputs `is_plain_signed_int` reads). + fn descr( + physical: PhysicalType, + logical: Option, + converted: ConvertedType, + ) -> ColumnDescriptor { + let ty = Type::primitive_type_builder("c", physical) + .with_logical_type(logical) + .with_converted_type(converted) + .build() + .unwrap(); + ColumnDescriptor::new(Arc::new(ty), 0, 0, ColumnPath::new(vec!["c".to_string()])) + } + + #[test] + fn plain_signed_ints_are_comparable() { + // Plain INT32/INT64 (no logical/converted type). + assert!(is_plain_signed_int(&descr( + PhysicalType::INT64, + None, + ConvertedType::NONE + ))); + assert!(is_plain_signed_int(&descr( + PhysicalType::INT32, + None, + ConvertedType::NONE + ))); + // Explicit signed-integer logical type. + assert!(is_plain_signed_int(&descr( + PhysicalType::INT32, + Some(LogicalType::integer(32, true)), + ConvertedType::NONE + ))); + // Legacy signed converted type. + assert!(is_plain_signed_int(&descr( + PhysicalType::INT32, + None, + ConvertedType::INT_16 + ))); + } + + #[test] + fn unsigned_and_nonint_logical_types_are_not_comparable() { + // Unsigned: a u32 max is stored as the i32 bit pattern -1, so reading + // the stat as signed inverts min/max and would wrongly prune. Reject. + assert!(!is_plain_signed_int(&descr( + PhysicalType::INT32, + Some(LogicalType::integer(32, false)), + ConvertedType::NONE + ))); + assert!(!is_plain_signed_int(&descr( + PhysicalType::INT64, + Some(LogicalType::integer(64, false)), + ConvertedType::NONE + ))); + // Legacy unsigned converted type (logical absent). + assert!(!is_plain_signed_int(&descr( + PhysicalType::INT32, + None, + ConvertedType::UINT_32 + ))); + // Date is INT32-backed but not a plain integer value — reject. + assert!(!is_plain_signed_int(&descr( + PhysicalType::INT32, + Some(LogicalType::Date), + ConvertedType::NONE + ))); + } +} From 0221ec0a928760d6b6292b505574104d24cbadc5 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Wed, 29 Jul 2026 17:58:04 -0700 Subject: [PATCH 027/135] [Data] arrow-rs crate: drop trailing blank line in .gitignore end-of-file-fixer (pre-commit) requires exactly one trailing newline. Ran the full pre-commit suite over every file in the PR this time so no later hook stage surprises CI again. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore index bc3f649a1e1c..163419a63704 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/.gitignore @@ -1,4 +1,3 @@ /target # Cargo.lock IS committed: this crate builds a wheel for reproducible CI, and # ci/docker/dataarrowrs.build.wanda.yaml lists Cargo.lock in its build srcs. - From a0199b13b4375ca25b401bb7bedaef356447a9f8 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Thu, 30 Jul 2026 11:45:59 -0700 Subject: [PATCH 028/135] [Data] arrow-rs reader: fix pyrefly type-check errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The premerge pyrefly job failed on the new arrow-rs files (exit 123), cascading the data-test and docs-go jobs to "broken". Fixes: - pyrefly.toml: add ray_data_arrow_rs.* to ignore-missing-imports (the crate is not in the wheel, so pyrefly can't resolve the import — same treatment as other optional deps like daft/lance/deltalake). - native_metadata.py: annotate s3_config with a directly-imported S3FileSystem instead of pa.fs.S3FileSystem (drops the now-unused `import pyarrow as pa` and the implicit-import error). - arrow_rs_parquet_file_reader.py: split the tuning resolver into resolve()/resolve_optional() so the four int-typed _ArrowRsTuning knobs get a non-Optional int (they always have a non-None default), fixing the bad-argument-type errors; drop the broken `self._allow_pickle_object_columns` guard (that attribute never existed — raise_on_pickle_object_columns already honors RAY_DATA_AUTOLOAD_PICKLE_OBJECT_SCALAR internally, matching the pyarrow reader). - pyrefly-excluded-files.txt: exclude test_arrow_rs_parquet_reader.py, as every sibling datasource test is already excluded. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- ci/lint/pyrefly-excluded-files.txt | 1 + pyrefly.toml | 1 + .../datasource_v2/native_metadata.py | 5 ++-- .../readers/arrow_rs_parquet_file_reader.py | 25 +++++++++++++------ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/ci/lint/pyrefly-excluded-files.txt b/ci/lint/pyrefly-excluded-files.txt index 807c740ed38e..62d75513a352 100644 --- a/ci/lint/pyrefly-excluded-files.txt +++ b/ci/lint/pyrefly-excluded-files.txt @@ -200,6 +200,7 @@ python/ray/data/tests/block_batching/test_iter_batches.py python/ray/data/tests/block_batching/test_util.py python/ray/data/tests/conftest.py python/ray/data/tests/datasource/test_arrow.py +python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py python/ray/data/tests/datasource/test_bigquery.py python/ray/data/tests/datasource/test_clickhouse.py python/ray/data/tests/datasource/test_csv.py diff --git a/pyrefly.toml b/pyrefly.toml index 873516f90193..5d835b13add0 100644 --- a/pyrefly.toml +++ b/pyrefly.toml @@ -45,6 +45,7 @@ ignore-missing-imports = [ "pytest.*", "pytest_lazy_fixtures.*", "ray.core.generated.*", + "ray_data_arrow_rs.*", "raydp.*", "rich.*", "snappy.*", diff --git a/python/ray/data/_internal/datasource_v2/native_metadata.py b/python/ray/data/_internal/datasource_v2/native_metadata.py index 8d4146e27488..b73bfc636072 100644 --- a/python/ray/data/_internal/datasource_v2/native_metadata.py +++ b/python/ray/data/_internal/datasource_v2/native_metadata.py @@ -11,8 +11,7 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: - import pyarrow as pa - from pyarrow.fs import FileSystem + from pyarrow.fs import FileSystem, S3FileSystem def native_metadata_supported_filesystem( @@ -30,7 +29,7 @@ def native_metadata_supported_filesystem( return filesystem is None or isinstance(filesystem, (LocalFileSystem, S3FileSystem)) -def s3_config(fs: "pa.fs.S3FileSystem") -> dict: +def s3_config(fs: "S3FileSystem") -> dict: """Recover the full S3 connection config from a pyarrow ``S3FileSystem`` so the native crate connects *identically* — same endpoint, credentials, region, addressing style — instead of rebuilding a default client from the ambient env diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index 15e54dc78556..fc56fceb49b7 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -981,7 +981,9 @@ def _tuning(self) -> _ArrowRsTuning: knob must not silently degrade a benchmark or production read). """ - def resolve(key: str, default: Optional[int], minimum: int) -> Optional[int]: + def resolve_optional( + key: str, default: Optional[int], minimum: int + ) -> Optional[int]: value = self._arrow_rs_tuning.get(key) if value is None: return default @@ -995,12 +997,21 @@ def resolve(key: str, default: Optional[int], minimum: int) -> Optional[int]: ) return value + def resolve(key: str, default: int, minimum: int) -> int: + # A non-None default guarantees a concrete int (the value is either + # that default or a validated int), so this never returns None. + resolved = resolve_optional(key, default, minimum) + assert resolved is not None + return resolved + return _ArrowRsTuning( decode_budget_bytes=resolve( "arrow_rs_decode_budget_bytes", _ARROW_RS_DECODE_BUDGET_BYTES, 1 ), k=resolve("arrow_rs_k", _ARROW_RS_K, 1), - split_threshold_bytes=resolve("arrow_rs_split_threshold_bytes", None, 0), + split_threshold_bytes=resolve_optional( + "arrow_rs_split_threshold_bytes", None, 0 + ), fetch_window_mb=resolve( "arrow_rs_fetch_window_mb", _ARROW_RS_FETCH_WINDOW_MB, 0 ), @@ -1467,11 +1478,11 @@ def _iter_native_tables( table = _apply_column_alignment(table, alignment) # Same opt-in gate as the pyarrow path: unpickling an # ArrowPythonObjectType column executes arbitrary code, so serving - # one requires the explicit env opt-in. Before the row filter — the - # check is schema-based, and pyarrow's scanner raises even for - # batches the filter would empty out. - if not self._allow_pickle_object_columns: - raise_on_pickle_object_columns(table) + # one requires the explicit env opt-in. raise_on_pickle_object_columns + # itself no-ops when RAY_DATA_AUTOLOAD_PICKLE_OBJECT_SCALAR=1. Before + # the row filter — the check is schema-based, and pyarrow's scanner + # raises even for batches the filter would empty out. + raise_on_pickle_object_columns(table) if filter_expr is not None: table = table.filter(filter_expr) if table.num_rows == 0: From d3950e764e19548f351426a2cdf9ab35e5feed4a Mon Sep 17 00:00:00 2001 From: Aarrya Date: Fri, 31 Jul 2026 16:14:01 -0700 Subject: [PATCH 029/135] [Data] TESTING (revert before PR): run arrow-rs reader across data release suite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DO NOT MERGE — drop this commit before opening the PR (git reset --hard HEAD~1). Makes every release test that reads Parquet exercise the Rust ray_data_arrow_rs decoder, with visible log confirmation of which path each read took. - context.py: flip use_arrow_rs_parquet_reader default to True (shipping default MUST stay False/opt-in — hence revert-before-PR). - byod_arrow_rs_parquet.sh: build the crate from source in the image (rustc + pip-install via maturin backend, branch head) so the flipped default has a crate to load. - release_data_tests.yaml: add the post_build_script to the DEFAULTS byod so every data-test image inherits the crate install. - parquet_scanner.create_reader: log (driver-side) when the arrow-rs reader is selected. - arrow_rs reader: log once per worker when native decode actually runs, and always warn (with reason) on any PyArrow fallback, so the logs show exactly where Rust ran vs fell back. grep the run for "ARROW-RS". Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../readers/arrow_rs_parquet_file_reader.py | 23 +++++++++--- .../datasource_v2/scanners/parquet_scanner.py | 8 +++++ python/ray/data/context.py | 7 +++- .../ray_release/byod/byod_arrow_rs_parquet.sh | 35 +++++++++++++++++++ release/release_data_tests.yaml | 5 +++ 5 files changed, 72 insertions(+), 6 deletions(-) create mode 100755 release/ray_release/byod/byod_arrow_rs_parquet.sh diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index fc56fceb49b7..00603f6947b4 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -140,6 +140,11 @@ logger = logging.getLogger(__name__) +# Set the first time this worker actually decodes a fragment natively, so the +# "native decode ACTIVE" confirmation is emitted once per worker process rather +# than once per fragment (which would flood the logs). +_LOGGED_NATIVE_ACTIVE = False + # --------------------------------------------------------------------------- # Tuning knobs # --------------------------------------------------------------------------- @@ -339,7 +344,12 @@ def _raise_if_strict_no_fallback(reason: str) -> None: arrow-rs path — a silent fallback would make the run validate PyArrow. Read per call (not at import) so a harness can toggle it within a session. Inert by default: production reads never set the variable. + + Regardless of strict mode, emit a visible warning naming the reason so a + benchmark run can confirm from the logs exactly where (and why) a read + dropped off the native path onto PyArrow. """ + logger.warning("Ray Data ARROW-RS: falling back to PyArrow — %s", reason) if os.environ.get("RAY_DATA_ARROW_RS_STRICT", "").lower() in ("", "0", "false"): return raise RuntimeError( @@ -692,11 +702,6 @@ def read(self, input_split: "FileManifest") -> "Iterator[pa.Table]": _raise_if_strict_no_fallback( f"unsupported parquet format kwargs {sorted(blocked)}" ) - logger.debug( - "arrow-rs read falling back to pyarrow: unsupported " - "parquet format kwargs %s", - sorted(blocked), - ) else: _raise_if_strict_no_fallback( f"unsupported filesystem {type(self._filesystem).__name__}" @@ -716,6 +721,14 @@ def read(self, input_split: "FileManifest") -> "Iterator[pa.Table]": return fragments_with_offsets, columns_to_synthesize, scanner_kwargs = plan + global _LOGGED_NATIVE_ACTIVE + if not _LOGGED_NATIVE_ACTIVE: + _LOGGED_NATIVE_ACTIVE = True + logger.warning( + "Ray Data ARROW-RS: native decode ACTIVE on this worker — " + "Parquet fragments are being read via the Rust ray_data_arrow_rs " + "crate, not PyArrow." + ) triples = self._dispatch_fragment_reads(fragments_with_offsets, scanner_kwargs) yield from self._postprocess(triples, columns_to_synthesize) diff --git a/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py b/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py index b06c29c0ed2d..f12c7a252d4b 100644 --- a/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py +++ b/python/ray/data/_internal/datasource_v2/scanners/parquet_scanner.py @@ -1,3 +1,4 @@ +import logging from dataclasses import dataclass, field from typing import Any, Dict, Optional @@ -18,6 +19,8 @@ ) from ray.util.annotations import DeveloperAPI +logger = logging.getLogger(__name__) + @DeveloperAPI @dataclass(frozen=True) @@ -91,6 +94,11 @@ def create_reader(self) -> ParquetFileReader: ) reader_cls = ArrowRsParquetFileReader + logger.warning( + "Ray Data ARROW-RS: using the native arrow-rs Parquet reader " + "(ray_data_arrow_rs) for this read_parquet. Per-file native vs " + "PyArrow-fallback decisions are logged from the read tasks." + ) return reader_cls( batch_size=self.batch_size, diff --git a/python/ray/data/context.py b/python/ray/data/context.py index eb66c8be574f..ab4119c12007 100644 --- a/python/ray/data/context.py +++ b/python/ray/data/context.py @@ -89,7 +89,12 @@ class ShuffleStrategy(str, enum.Enum): # ``use_datasource_v2`` is also set. Requires the native ``ray_data_arrow_rs`` # module to be installed. Defaults to False. DEFAULT_USE_ARROW_RS_PARQUET_READER = env_bool( - "RAY_DATA_USE_ARROW_RS_PARQUET_READER", False + # TESTING COMMIT ONLY — default flipped to True so every read_parquet in the + # release suite exercises the Rust reader. Revert this commit before opening + # the PR: the shipping default MUST stay False (opt-in). Paired with + # release/ray_release/byod/byod_arrow_rs_parquet.sh (installs the crate). + "RAY_DATA_USE_ARROW_RS_PARQUET_READER", + True, ) # Default target chunk size for ``ParquetFileChunker``. ``None`` means the chunker diff --git a/release/ray_release/byod/byod_arrow_rs_parquet.sh b/release/ray_release/byod/byod_arrow_rs_parquet.sh new file mode 100755 index 000000000000..796071780724 --- /dev/null +++ b/release/ray_release/byod/byod_arrow_rs_parquet.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# Build + install the ray_data_arrow_rs native Parquet decoder into the +# release-test BYOD image, so tests that read Parquet exercise the Rust reader +# instead of PyArrow. Runs as a Docker RUN layer at IMAGE BUILD time (has +# internet). The crate is NOT in the Ray wheel or on PyPI, so without this the +# reader would raise on `import ray_data_arrow_rs`. +# +# We build from source (rather than shipping a prebuilt wheel): install a +# minimal Rust toolchain, fetch the crate source from the branch, and let +# `pip install ` drive maturin via the pyproject build backend. Only rustc +# needs to pre-exist; pip installs maturin itself in the isolated build env, and +# the committed Cargo.lock makes the dependency set reproducible. +# +# Build cost (a few minutes to compile arrow/parquet/object_store in release) +# is paid once per image build, is cached, and is NOT part of any test's +# measured runtime — it happens before the cluster boots. +set -exo pipefail + +BRANCH="arrow-rs-parquet-reader-pr" +CRATE_SUBDIR="python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs" + +# Minimal stable Rust toolchain (~1 min for rustup itself). +curl -sSf https://sh.rustup.rs -o /tmp/rustup-init.sh +sh /tmp/rustup-init.sh -y --profile minimal --default-toolchain stable +export PATH="$HOME/.cargo/bin:$PATH" + +# Fetch the crate source from the branch head and build+install it. pip reads +# the maturin build-backend from pyproject.toml and compiles the extension. +curl -sL "https://github.com/AarryaSaraf/ray/archive/refs/heads/${BRANCH}.tar.gz" \ + | tar xz -C /tmp +pip3 install --no-cache-dir "/tmp/ray-${BRANCH}/${CRATE_SUBDIR}" + +# Fail the image build loudly if the crate isn't importable / is a partial +# build, so it surfaces here instead of as a scanner error at test run time. +python3 -c "import ray_data_arrow_rs as m; assert hasattr(m, 'read_row_groups')" diff --git a/release/release_data_tests.yaml b/release/release_data_tests.yaml index c4ad188ca6f0..8421e203e437 100644 --- a/release/release_data_tests.yaml +++ b/release/release_data_tests.yaml @@ -14,6 +14,11 @@ # test that needs its own runtime_env, or deliberately override them (as # ``heterogeneous_memory_batch_inference_multitenancy`` does). byod: + # TESTING COMMIT ONLY (revert before opening the PR): build + install the + # Rust ray_data_arrow_rs crate into every data-test image so the flipped + # use_arrow_rs_parquet_reader default (context.py) has a crate to load. + # Inherited by every test that does not define its own byod.post_build_script. + post_build_script: byod_arrow_rs_parquet.sh runtime_env: # Enable verbose stats for resource manager (to troubleshoot autoscaling) - RAY_DATA_DEBUG_RESOURCE_MANAGER=1 From 5c225ca5f7f4876e1df573eb3b357faf9a0c88da Mon Sep 17 00:00:00 2001 From: Aarrya Date: Fri, 31 Jul 2026 18:25:43 -0700 Subject: [PATCH 030/135] [Data] arrow-rs reader: resolve chunk descriptor to row-group range MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The native chunked-read path read `chunk_metadata["row_group_start"]` / `["row_group_end"]` — keys from the row-group-aware chunker (PR #64301) that was reverted upstream (PR #64541). The current `ParquetFileChunker` emits a relative `(chunk_idx, total_num_chunks)` descriptor and defers row-group resolution to read time, so any chunked read raised `KeyError: 'row_group_start'` (seen in the `read_large_parquet` release tests). Resolve the descriptor with the same `_calculate_row_group_range` helper the PyArrow reader uses, in both `_native_fragments_for_file` and `_native_count_fragments`, so native fragments line up byte-for-byte with the PyArrow path (identical row_hash offsets and limit slicing) and the planner-over-estimated case (`None`) is handled. Update `test_native_chunked_read_row_hash_parity` to build metadata with the real schema; validated end-to-end that the chunked native read matches PyArrow. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../readers/arrow_rs_parquet_file_reader.py | 38 ++++++++++++++++--- .../test_arrow_rs_parquet_reader.py | 16 ++++---- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index 00603f6947b4..fd377a86cd39 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -943,9 +943,23 @@ def _native_fragments_for_file( if chunk_metadata is None: return [(_NativeParquetFragment(path, None, alignment), 0)] - total = len(row_group_num_rows) - start = min(chunk_metadata["row_group_start"], total) - end = min(chunk_metadata["row_group_end"], total) + from ray.data._internal.datasource_v2.chunkers.parquet_file_chunking_utils import ( # noqa: E501 + _calculate_row_group_range, + ) + + # ``chunk_metadata`` carries a *relative* chunk descriptor + # (``chunk_idx``/``total_num_chunks``), not absolute row-group indices. + # Resolve it to a ``[start, end)`` row-group range with the same helper + # the base reader uses, so native fragments line up byte-for-byte with + # the PyArrow path (identical ``row_hash`` offsets and limit slicing). + rg_range = _calculate_row_group_range( + chunk_metadata["chunk_idx"], + chunk_metadata["total_num_chunks"], + len(row_group_num_rows), + ) + if rg_range is None: + return [] + start, end = rg_range fragments: List[Tuple[_NativeParquetFragment, int]] = [] file_row_offset = sum(row_group_num_rows[:start]) for rg in range(start, end): @@ -968,9 +982,21 @@ def _native_count_fragments( if chunk_metadata is None: return [(_NativeCountFragment(path, sum(row_group_num_rows)), 0)] - total = len(row_group_num_rows) - start = min(chunk_metadata["row_group_start"], total) - end = min(chunk_metadata["row_group_end"], total) + from ray.data._internal.datasource_v2.chunkers.parquet_file_chunking_utils import ( # noqa: E501 + _calculate_row_group_range, + ) + + # See ``_native_fragments_for_file``: resolve the relative chunk + # descriptor to an absolute ``[start, end)`` row-group range so count + # fragments share the base reader's granularity and offsets. + rg_range = _calculate_row_group_range( + chunk_metadata["chunk_idx"], + chunk_metadata["total_num_chunks"], + len(row_group_num_rows), + ) + if rg_range is None: + return [] + start, end = rg_range fragments: List[Tuple[_NativeCountFragment, int]] = [] file_row_offset = sum(row_group_num_rows[:start]) for rg in range(start, end): diff --git a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py index 14fa03701cd6..3419d8179d5c 100644 --- a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py +++ b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py @@ -449,9 +449,9 @@ def run(parquet_format_kwargs): def test_native_chunked_read_row_hash_parity(tmp_path): - """A chunked file (one manifest row per ``[row_group_start, row_group_end)`` - range) must produce byte-identical ``row_hash`` values via the native path - and PyArrow. + """A chunked file (one manifest row per ``(chunk_idx, total_num_chunks)`` + descriptor, resolved to a ``[start, end)`` row-group range at read time) must + produce byte-identical ``row_hash`` values via the native path and PyArrow. ``row_hash`` is seeded by ``(fragment_path, file_row_offset)`` per sub- fragment (:func:`_compute_row_hashes`), so this is the load-bearing test for @@ -481,14 +481,16 @@ def test_native_chunked_read_row_hash_parity(tmp_path): pq.write_table(table, str(path), write_page_index=True, row_group_size=5_000) assert pq.ParquetFile(str(path)).num_row_groups == 4 - # Two chunks over the same file: row groups [0,2) and [2,4). This forces the - # per-row-group native fragment path with a non-zero offset on the 2nd chunk. + # Two chunks over the same file. With 4 row groups split into 2 chunks, the + # reader resolves chunk 0 -> row groups [0, 2) and chunk 1 -> [2, 4) via + # ``_calculate_row_group_range``; the 2nd chunk forces the per-row-group + # native fragment path with a non-zero file row offset. chunks = [ create_chunk_metadata( - ParquetFileChunkMetadata, row_group_start=0, row_group_end=2 + ParquetFileChunkMetadata, chunk_idx=0, total_num_chunks=2 ), create_chunk_metadata( - ParquetFileChunkMetadata, row_group_start=2, row_group_end=4 + ParquetFileChunkMetadata, chunk_idx=1, total_num_chunks=2 ), ] size = os.path.getsize(path) From 3a7f9d79de27285f5ed2a5654d22bc9f98a8da53 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Fri, 31 Jul 2026 18:27:17 -0700 Subject: [PATCH 031/135] [Data] arrow-rs tests: drop obsolete native-footer-chunking tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test_chunker_native_metadata_matches_pyarrow and test_chunker_native_metadata_makes_no_pyarrow_footer_read asserted that the ParquetFileChunker reads Parquet footers through the native crate at chunk time — a capability from the row-group-aware chunker (PR #64301) that was reverted upstream (PR #64541). The current chunker splits by byte size and reads no footer during chunking, so both tests reference a dead generate_chunk_metadatas(path, size, fs) signature and dead metadata keys. The reader's own native footer read stays covered by test_native_read_is_pyarrow_free. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../test_arrow_rs_parquet_reader.py | 76 ------------------- 1 file changed, 76 deletions(-) diff --git a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py index 3419d8179d5c..c423fa5ff7a8 100644 --- a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py +++ b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py @@ -1802,82 +1802,6 @@ def test_arrow_rs_s3_struct_parity(s3_fs, s3_path, restore_ctx): assert pa_tbl.equals(rs_tbl) -@pytest.mark.parametrize( - "target_chunk_size", - [0, 6_000, 11_000, 10 * 1024**3], - ids=["one_rg_per_chunk", "bundle_pairs_a", "bundle_pairs_b", "whole_file"], -) -def test_chunker_native_metadata_matches_pyarrow( - tmp_path, restore_ctx, target_chunk_size -): - """Step 3: with the arrow-rs flag on, ``ParquetFileChunker`` reads the footer - through the native crate instead of PyArrow. The crate's - ``row_group_compressed_sizes`` equals PyArrow's ``sum(col.total_compressed_size)``, - so the greedy row-group bundling produces byte-for-byte identical chunk ranges - *and* chunk sizes whether the flag is on or off.""" - from pyarrow.fs import LocalFileSystem - - from ray.data._internal.datasource_v2.chunkers.file_chunker import ( - ParquetFileChunker, - ) - - path = tmp_path / "data.parquet" - table = _flat_table(num_rows=4_000) - pq.write_table(table, str(path), write_page_index=True, row_group_size=1_000) - size = path.stat().st_size - fs = LocalFileSystem() - - def chunks_for(use_arrow_rs): - restore_ctx.use_arrow_rs_parquet_reader = use_arrow_rs - chunker = ParquetFileChunker(target_chunk_size=target_chunk_size) - return [ - (m["row_group_start"], m["row_group_end"], sz) - for m, sz in chunker.generate_chunk_metadatas(str(path), size, fs) - ] - - assert chunks_for(True) == chunks_for(False) - - -def test_chunker_native_metadata_makes_no_pyarrow_footer_read(tmp_path, restore_ctx): - """With the flag on, the chunker must not touch PyArrow's ``read_metadata`` — - the whole supported-file footer read goes through the arrow-rs crate.""" - import pyarrow.parquet as pqmod - from pyarrow.fs import LocalFileSystem - - from ray.data._internal.datasource_v2.chunkers.file_chunker import ( - ParquetFileChunker, - ) - - path = tmp_path / "data.parquet" - pq.write_table( - _flat_table(num_rows=4_000), - str(path), - write_page_index=True, - row_group_size=1_000, - ) - size = path.stat().st_size - fs = LocalFileSystem() - - calls = {"n": 0} - orig = pqmod.read_metadata - - def _spy(*args, **kwargs): - calls["n"] += 1 - return orig(*args, **kwargs) - - pqmod.read_metadata = _spy - try: - restore_ctx.use_arrow_rs_parquet_reader = True - list(ParquetFileChunker().generate_chunk_metadatas(str(path), size, fs)) - assert calls["n"] == 0, "flag ON must not call pyarrow.parquet.read_metadata" - - restore_ctx.use_arrow_rs_parquet_reader = False - list(ParquetFileChunker().generate_chunk_metadatas(str(path), size, fs)) - assert calls["n"] == 1, "flag OFF must use pyarrow.parquet.read_metadata" - finally: - pqmod.read_metadata = orig - - def _write_int96(path, embed_arrow_schema): """Write a Parquet file storing the timestamp column as the legacy INT96 physical type. ``embed_arrow_schema=False`` mimics Spark/Hive/Impala (no From 890e1ab9c0280cca33ede8c2f515aeba81e7eb36 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 15:08:22 -0700 Subject: [PATCH 032/135] [Data] datasource_v2: honor page_checksum_verification on the PyArrow read path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `page_checksum_verification` is a *scan* option. `_make_format` sets it on the format's `default_fragment_scan_options`, but `_arrow_scanner_kwargs` handed the scanner an explicit `ParquetFragmentScanOptions(use_buffered_stream, buffer_size)` that overrode that default — so an explicit `page_checksum_verification=True` was silently dropped (pyarrow defaults to no verification) and corrupt pages read clean. Thread the option through the explicit scan options so it is actually honored, matching the arrow-rs crate (which always verifies). This is a base V2 reader fix and affects PyArrow reads regardless of the arrow-rs flag; it makes `test_page_checksum_verification_true_native`'s parity-of-error assertion hold on the PyArrow side. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../readers/parquet_file_reader.py | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py index 10a3b694a974..06d1d83ca60c 100644 --- a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py @@ -620,11 +620,23 @@ def _arrow_scanner_kwargs(self) -> dict: # meaningful bytes per round-trip. Tunable via env var for # workloads that need a different point on the latency/memory- # peak curve. + scan_opts: Dict[str, Any] = { + "use_buffered_stream": True, + "buffer_size": _PARQUET_FRAGMENT_BUFFER_SIZE, + } + # ``page_checksum_verification`` is a *scan* option, not a format option. + # ``_make_format`` sets it on the format's ``default_fragment_scan_options``, + # but the explicit ``fragment_scan_options`` we hand the scanner below + # overrides that default — so an explicit request would be silently + # dropped (pyarrow's default is ``False``, i.e. no verification). Thread + # it through here so ``page_checksum_verification=True`` is actually + # honored on the PyArrow read path (matching the arrow-rs crate, which + # always verifies). + pcv = self._parquet_format_kwargs.get("page_checksum_verification") + if pcv is not None: + scan_opts["page_checksum_verification"] = pcv kwargs: dict = { - "fragment_scan_options": pds.ParquetFragmentScanOptions( - use_buffered_stream=True, - buffer_size=_PARQUET_FRAGMENT_BUFFER_SIZE, - ), + "fragment_scan_options": pds.ParquetFragmentScanOptions(**scan_opts), "fragment_readahead": 1, } return kwargs From 8f5170da644bb52b8fa5e8118924c8c1ccdae304 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 15:08:37 -0700 Subject: [PATCH 033/135] [Data] arrow-rs: decode Ray tensor extension files natively (ARROW:schema fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Parquet files written by Ray 2.49–2.54 under RAY_DATA_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA=1 embed the tensor extension type as a cloudpickle blob in the footer's `ARROW:schema` IPC metadata. arrow-rs's IPC verifier rejects that non-UTF8 value (`Utf8Error` at custom_metadata → value), so native decode crashed on these files (release build 102757, wide_schema_pipeline_tensors). Fixed natively — no widened fallback: - Crate: `load_meta_local`/`load_meta_s3` catch *that specific* parse error and reload the footer `with_skip_arrow_metadata(true)`, decoding the parquet storage type instead of crashing, and set a new `arrow_schema_skipped` flag on `ParquetFileMetadata`. Files whose footer parses normally are untouched. - Python: for a skipped file, `_read_native_metadata` reads the file's own footer schema via `pq.read_schema` (pyarrow parses the binary metadata fine) and passes it to `_plan_column_alignment` as a per-file `target_schema`; the alignment casts storage → extension (pyarrow does the list→large_list offset-width change and the extension wrap in one `.cast()`, byte-identical). The per-file override is needed because `_file_dataset_schema` returns None for any extension-typed caller schema. A `_reconcile_to_expected` cast keeps the legacy per-fragment path safe. Verified end-to-end through `ray.data.read_parquet` (parity under RAY_DATA_ARROW_RS_STRICT=1, native decode active). Adds `test_cloudpickle_tensor_metadata_native_parity` and tidies `test_arrow_rs_supported_gate`. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/src/lib.rs | 106 ++++++++++---- .../readers/arrow_rs_parquet_file_reader.py | 133 +++++++++++++++--- .../test_arrow_rs_parquet_reader.py | 63 ++++++++- 3 files changed, 258 insertions(+), 44 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs index ef848bebfaba..72f211aa04dd 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -378,6 +378,13 @@ struct ParquetFileMetadata { // gate must fall it back. INT96 columns that come out as ns already match. #[pyo3(get)] int96_columns: Vec, + // True when the embedded Arrow schema (`ARROW:schema` footer metadata) could + // not be parsed and was skipped (see `load_meta_local`), so `schema` here is + // the parquet-inferred *storage* schema rather than the Arrow logical schema. + // The Python reader reconstructs any lost extension types (e.g. Ray's + // cloudpickle-serialized tensor type) from the file's own footer schema. + #[pyo3(get)] + arrow_schema_skipped: bool, } #[pymethods] @@ -413,9 +420,66 @@ fn reader_options(page_index: PageIndexPolicy) -> ArrowReaderOptions { ArrowReaderOptions::new().with_page_index_policy(page_index) } +/// arrow-rs's IPC verifier rejects an embedded `ARROW:schema` footer whose field +/// `custom_metadata` values aren't valid UTF-8. Ray files written by 2.49-2.54 +/// store the tensor extension type's metadata as a cloudpickle blob (binary), so +/// `ArrowReaderMetadata::load` fails parsing that embedded schema +/// (`Unable to get root as message stored in ARROW:schema: Utf8Error`). Detect +/// exactly that failure so the loaders below can retry with the embedded arrow +/// schema skipped — decoding the parquet-inferred storage types instead — after +/// which the Python reader re-applies the extension type from the pinned dataset +/// schema (a `list<..>`→`extension<..>` cast). Any other load error propagates. +fn is_embedded_arrow_schema_error(e: &E) -> bool { + e.to_string().contains("ARROW:schema") +} + +/// Load footer metadata for a local file, retrying with the embedded arrow schema +/// skipped when (and only when) it fails to parse (see +/// [`is_embedded_arrow_schema_error`]). Files whose footer parses normally are +/// untouched, so INT96 hints and valid embedded schemas behave exactly as before. +/// The returned bool is `true` when the retry fired (embedded arrow schema +/// skipped → the reported schema is the parquet-inferred storage type), which the +/// Python reader uses to reconstruct the extension type from the pinned schema. +fn load_meta_local( + file: &File, + page_index: PageIndexPolicy, +) -> Result<(ArrowReaderMetadata, bool), ParquetError> { + match ArrowReaderMetadata::load(file, reader_options(page_index)) { + Err(e) if is_embedded_arrow_schema_error(&e) => ArrowReaderMetadata::load( + file, + reader_options(page_index).with_skip_arrow_metadata(true), + ) + .map(|m| (m, true)), + other => other.map(|m| (m, false)), + } +} + +/// S3 counterpart of [`load_meta_local`]: same targeted retry (and same +/// skipped-bool contract), building a fresh `ParquetObjectReader` for the second +/// attempt so no half-consumed reader state carries over. +async fn load_meta_s3( + store: Arc, + path: ObjPath, + page_index: PageIndexPolicy, +) -> Result<(ArrowReaderMetadata, bool), ParquetError> { + let mut probe = ParquetObjectReader::new(store.clone(), path.clone()); + match ArrowReaderMetadata::load_async(&mut probe, reader_options(page_index)).await { + Err(e) if is_embedded_arrow_schema_error(&e) => { + let mut retry = ParquetObjectReader::new(store, path); + ArrowReaderMetadata::load_async( + &mut retry, + reader_options(page_index).with_skip_arrow_metadata(true), + ) + .await + .map(|m| (m, true)) + } + other => other.map(|m| (m, false)), + } +} + /// Pull the fields Python needs out of an already-loaded `ArrowReaderMetadata`. /// Local and S3 both funnel through here so the shape is identical. -fn build_file_metadata(meta: &ArrowReaderMetadata) -> ParquetFileMetadata { +fn build_file_metadata(meta: &ArrowReaderMetadata, arrow_schema_skipped: bool) -> ParquetFileMetadata { let md = meta.metadata(); let n = md.num_row_groups(); let mut row_group_num_rows = Vec::with_capacity(n); @@ -450,6 +514,7 @@ fn build_file_metadata(meta: &ArrowReaderMetadata) -> ParquetFileMetadata { row_group_byte_sizes, row_group_compressed_sizes, int96_columns: int96_roots.into_iter().collect(), + arrow_schema_skipped, } } @@ -664,8 +729,7 @@ fn open_local_reader( } else { PageIndexPolicy::Skip }; - let opts = reader_options(policy); - let meta = ArrowReaderMetadata::load(&File::open(&path)?, opts)?; + let (meta, _skipped) = load_meta_local(&File::open(&path)?, policy)?; let mask = projection_mask(meta.metadata().file_metadata().schema_descr(), &columns); let selected: Vec = match row_groups { Some(v) => v, @@ -1064,9 +1128,9 @@ fn read_row_groups_s3( let (meta, mask, schema) = py .allow_threads(|| { rt.block_on(async { - let opts = reader_options(PageIndexPolicy::Optional); - let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); - let meta = ArrowReaderMetadata::load_async(&mut probe, opts).await?; + let (meta, _skipped) = + load_meta_s3(store.clone(), obj_path.clone(), PageIndexPolicy::Optional) + .await?; let mask = projection_mask(meta.metadata().file_metadata().schema_descr(), &columns); let schema = ParquetRecordBatchStreamBuilder::new_with_metadata( @@ -1166,13 +1230,10 @@ fn read_row_groups_s3( #[pyfunction] fn read_metadata(py: Python<'_>, path: String) -> PyResult { // Blocking footer read; release the GIL for sibling Python threads. - let meta = py - .allow_threads(|| { - let opts = reader_options(PageIndexPolicy::Skip); - ArrowReaderMetadata::load(&File::open(&path)?, opts) - }) + let (meta, skipped) = py + .allow_threads(|| load_meta_local(&File::open(&path)?, PageIndexPolicy::Skip)) .map_err(to_py)?; - Ok(build_file_metadata(&meta)) + Ok(build_file_metadata(&meta, skipped)) } /// S3 counterpart of [`read_metadata`]: one async footer fetch via `object_store`, @@ -1210,16 +1271,16 @@ fn read_metadata_s3( let obj_path = ObjPath::from(key); let rt = shared_runtime(); // Blocking async footer fetch; release the GIL for sibling Python threads. - let meta = py + let (meta, skipped) = py .allow_threads(|| { - rt.block_on(async { - let opts = reader_options(PageIndexPolicy::Skip); - let mut probe = ParquetObjectReader::new(store.clone(), obj_path.clone()); - ArrowReaderMetadata::load_async(&mut probe, opts).await - }) + rt.block_on(load_meta_s3( + store.clone(), + obj_path.clone(), + PageIndexPolicy::Skip, + )) }) .map_err(to_py)?; - Ok(build_file_metadata(&meta)) + Ok(build_file_metadata(&meta, skipped)) } /// Return the row-group ids of `path` that survive `predicate_json`'s statistics @@ -1235,11 +1296,8 @@ fn select_row_groups( predicate_json: Option, ) -> PyResult> { // Blocking footer read; release the GIL for sibling Python threads. - let meta = py - .allow_threads(|| { - let opts = reader_options(PageIndexPolicy::Skip); - ArrowReaderMetadata::load(&File::open(&path)?, opts) - }) + let (meta, _skipped) = py + .allow_threads(|| load_meta_local(&File::open(&path)?, PageIndexPolicy::Skip)) .map_err(to_py)?; let all: Vec = (0..meta.metadata().num_row_groups()).collect(); Ok(apply_predicate(&meta, all, &predicate_json)) diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index fd377a86cd39..a5447332d76e 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -600,6 +600,28 @@ def _apply_column_alignment( return table +def _reconcile_to_expected(table: pa.Table, expected_schema: pa.Schema) -> pa.Table: + """Cast any decoded column whose type differs from ``expected_schema`` to the + expected type. Used by the per-fragment path (:meth:`_iter_native_tables` + with ``expected_schema``), where the crate may hand back a parquet *storage* + type for an extension column whose non-UTF8 embedded metadata it had to skip + — this restores the extension type the base pyarrow scanner would produce. + The per-fragment gate already withholds every other kind of drift, so the + only divergence reaching here is a safe storage → extension wrap (a lossy + cast would raise, exactly as pyarrow's own scanner cast does).""" + for name in table.column_names: + exp_idx = expected_schema.get_field_index(name) + if exp_idx == -1: + continue + exp_type = expected_schema.field(exp_idx).type + col_idx = table.schema.get_field_index(name) + if table.schema.field(col_idx).type != exp_type: + table = table.set_column( + col_idx, pa.field(name, exp_type), table.column(col_idx).cast(exp_type) + ) + return table + + class _NativeParquetFragment(NamedTuple): """A native (pyarrow-free) unit of work for one file's row-group slice. @@ -762,15 +784,38 @@ def _verify_footer_limits(self, paths: List[str]) -> None: # a violation raises pyarrow's usual thrift OSError. pq.ParquetFile(source, **limits) + def _read_pyarrow_footer_schema(self, path: str) -> Optional[pa.Schema]: + """Read a file's footer schema via pyarrow, which parses binary field + metadata that arrow-rs's IPC verifier rejects. Used only to recover the + Arrow *logical* schema — including reconstructed extension types like + Ray's cloudpickle-serialized tensor type — when the crate had to skip the + embedded arrow schema (:meth:`_read_native_metadata`). Footer-only (a few + KB); ``None`` on failure so the caller falls the file back to pyarrow.""" + import pyarrow.parquet as pq + + try: + return pq.read_schema(path, filesystem=self._filesystem) + except Exception as e: # noqa: BLE001 - any footer failure => fallback + logger.debug("pyarrow footer schema read failed for %s: %s", path, e) + return None + def _read_native_metadata( self, path: str - ) -> Optional[Tuple[pa.Schema, List[int], List[str]]]: + ) -> Optional[Tuple[pa.Schema, List[int], List[str], Optional[pa.Schema]]]: """Read one file's footer via the crate: ``(arrow schema, per-row-group - row counts, int96 root columns)``, or ``None`` if the native footer read - fails (caller then falls the whole split back to pyarrow). Does *not* - swallow a missing extension — :meth:`_import_extension` raises that - loudly. The int96 list lets :meth:`_plan_column_alignment` realign the - crate's decoded unit for those columns to what PyArrow produces.""" + row counts, int96 root columns, extension-target schema)``, or ``None`` + if the native footer read fails (caller then falls the whole split back + to pyarrow). Does *not* swallow a missing extension — + :meth:`_import_extension` raises that loudly. The int96 list lets + :meth:`_plan_column_alignment` realign the crate's decoded unit for those + columns to what PyArrow produces. + + The 4th element is a per-file *target* schema, non-``None`` only when the + crate reports it had to skip the embedded arrow schema (non-UTF8 field + metadata, e.g. Ray's cloudpickle tensor type): then the crate decodes the + parquet *storage* types, and this pyarrow-read footer schema carries the + reconstructed extension types the base path would produce, so + :meth:`_plan_column_alignment` can cast storage → extension per file.""" # Surfaces a missing extension loudly (import inside the crate call); # any *footer-read* failure below becomes a whole-split pyarrow fallback. self._import_extension() @@ -780,7 +825,22 @@ def _read_native_metadata( except Exception as e: # noqa: BLE001 - any footer failure => fallback logger.debug("arrow-rs native metadata read failed for %s: %s", path, e) return None - return pa.schema(md), list(md.row_group_num_rows), list(md.int96_columns) + + target_override: Optional[pa.Schema] = None + if getattr(md, "arrow_schema_skipped", False): + # The crate skipped a non-UTF8 embedded arrow schema; recover the + # logical (extension-typed) schema via pyarrow so the decode can be + # realigned to it. If pyarrow can't read the footer either, fall the + # whole split back rather than emit storage-typed columns. + target_override = self._read_pyarrow_footer_schema(path) + if target_override is None: + return None + return ( + pa.schema(md), + list(md.row_group_num_rows), + list(md.int96_columns), + target_override, + ) def _plan_native_read( self, manifest: "FileManifest" @@ -804,7 +864,9 @@ def _plan_native_read( # raise (parity-of-error), before any native work happens. self._verify_footer_limits(unique_paths) - native_md: Dict[str, Tuple[pa.Schema, List[int], List[str]]] = {} + native_md: Dict[ + str, Tuple[pa.Schema, List[int], List[str], Optional[pa.Schema]] + ] = {} for path in unique_paths: md = self._read_native_metadata(path) if md is None: @@ -823,7 +885,7 @@ def _plan_native_read( on_disk_names = set(self._file_dataset_schema.names) else: on_disk_names = set() - for schema, _, _ in native_md.values(): + for schema, _, _, _ in native_md.values(): on_disk_names.update(schema.names) columns_to_read_from_file, columns_to_synthesize = self._split_columns( on_disk_names @@ -868,8 +930,10 @@ def _plan_native_read( # Per-file verdict: native decode (with an optional post-decode # alignment plan) vs pyarrow fallback. alignment_by_path: Dict[str, Optional[_ColumnAlignment]] = {} - for path, (schema, _, int96_cols) in native_md.items(): - alignment = self._plan_column_alignment(schema, read_columns, int96_cols) + for path, (schema, _, int96_cols, target_override) in native_md.items(): + alignment = self._plan_column_alignment( + schema, read_columns, int96_cols, target_schema=target_override + ) if alignment is not None: alignment_by_path[path] = None if alignment.is_noop else alignment native_paths = set(alignment_by_path) @@ -1177,6 +1241,7 @@ def _plan_column_alignment( physical_schema: pa.Schema, read_columns: Optional[List[str]], int96_columns: Optional[List[str]] = None, + target_schema: Optional[pa.Schema] = None, ) -> Optional[_ColumnAlignment]: """Per-file half of the support gate, upgraded from a yes/no verdict to a *plan*: how to make this file's native decode match what the pyarrow @@ -1208,7 +1273,15 @@ def _plan_column_alignment( the unified type (the scanner's implicit cast under a pinned schema); extension-typed drift stays on PyArrow. """ - unified_schema = self._file_dataset_schema + # ``target_schema`` overrides the reader-wide pin for this one file. It's + # supplied when the crate skipped the embedded arrow schema (non-UTF8 + # extension metadata): the file's own pyarrow-read footer schema carries + # the reconstructed extension types the decode must be realigned to, + # even though the reader-wide pin (``_file_dataset_schema``) is ``None`` + # for extension-bearing reads. + unified_schema = ( + target_schema if target_schema is not None else self._file_dataset_schema + ) int96 = set(int96_columns or ()) # The expected output columns: the explicit read set when projected; # otherwise the *unified* schema's columns (the scanner outputs the @@ -1284,13 +1357,27 @@ def _plan_column_alignment( unified_type = unified_schema.field(unified_idx).type if unified_type != target: # Per-file drift vs the pinned unified schema: the - # scanner casts implicitly; mirror it. Extension-typed - # drift (e.g. per-file tensor shapes) must not be cast. - if _is_extension_type(unified_type) or _is_extension_type( + # scanner casts implicitly; mirror it. + if _is_extension_type(unified_type) and not _is_extension_type( + target + ): + # The crate decoded the parquet *storage* type because + # the embedded arrow schema was skipped (non-UTF8 + # extension metadata, e.g. Ray's cloudpickle tensor + # type). Reconstruct the extension by casting storage + # -> extension: pyarrow does the offset-width change + # and the extension wrap in one cast, matching what + # the base scanner reconstructs from the same footer + # (verified byte-identical). + target = unified_type + elif _is_extension_type(unified_type) or _is_extension_type( target ): + # extension<->extension drift (e.g. per-file tensor + # shapes) isn't a safe cast — fall back. return None - target = unified_type + else: + target = unified_type if target != field_type: casts.append((name, target, allow_time_truncate)) @@ -1420,7 +1507,16 @@ def _iter_fragment_tables( if fragment.row_groups is not None else None ) - yield from self._iter_native_tables(fragment.path, row_groups, scanner_kwargs) + # The gate admits this fragment as a byte-identical native decode, but the + # crate may still return a storage type for an extension column whose + # binary metadata it had to skip. Reconcile to the fragment's own arrow + # (post-coercion) schema so that legacy path can't silently emit storage. + yield from self._iter_native_tables( + fragment.path, + row_groups, + scanner_kwargs, + expected_schema=fragment.physical_schema, + ) def _iter_native_tables( self, @@ -1428,6 +1524,7 @@ def _iter_native_tables( row_groups: Optional[List[int]], scanner_kwargs: dict, alignment: Optional[_ColumnAlignment] = None, + expected_schema: Optional[pa.Schema] = None, ) -> "Iterator[pa.Table]": """Decode ``row_groups`` of ``path`` via the native crate and yield ``pa.Table`` batches, applying the file's :class:`_ColumnAlignment` @@ -1515,6 +1612,8 @@ def _iter_native_tables( for batch in record_batch_reader: table = pa.Table.from_batches([batch], schema=record_batch_reader.schema) table = _apply_column_alignment(table, alignment) + if expected_schema is not None: + table = _reconcile_to_expected(table, expected_schema) # Same opt-in gate as the pyarrow path: unpickling an # ArrowPythonObjectType column executes arbitrary code, so serving # one requires the explicit env opt-in. raise_on_pickle_object_columns diff --git a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py index c423fa5ff7a8..ead0584fd179 100644 --- a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py +++ b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py @@ -1296,6 +1296,54 @@ def test_extension_types_native_parity(tmp_path, restore_ctx): pq.write_table(pa.table({"u": union_array}), str(tmp_path / "union.parquet")) +def test_cloudpickle_tensor_metadata_native_parity(tmp_path, monkeypatch): + """A Ray tensor column serialized with the legacy *cloudpickle* format (files + written by Ray 2.49-2.54) stores non-UTF8 bytes in the parquet ``ARROW:schema`` + field metadata, which arrow-rs's IPC verifier rejects — the crate used to + crash (``Unable to get root as message stored in ARROW:schema: Utf8Error``). + + The crate now retries the footer load with the embedded arrow schema skipped + (decoding the parquet *storage* type), and the reader reconstructs the + extension from the file's own pyarrow-read footer schema. So the file decodes + NATIVELY and byte-identically to PyArrow instead of crashing or silently + falling back. Regression test for the release ``wide_schema_pipeline_tensors`` + failure (Bug 2).""" + import ray.data._internal.tensor_extensions.arrow as tx + from ray.data.extensions import ArrowTensorArray + + # Write with the legacy cloudpickle serialization → binary metadata value. + monkeypatch.setattr( + tx, + "ARROW_EXTENSION_SERIALIZATION_FORMAT", + tx._SerializationFormat.CLOUDPICKLE, + ) + n = 200 + tens = ArrowTensorArray.from_numpy( + np.arange(4 * n, dtype=np.float32).reshape(n, 2, 2) + ) + path = tmp_path / "cp_tensor.parquet" + pq.write_table( + pa.table({"id": pa.array(np.arange(n, dtype=np.int64)), "t": tens}), + str(path), + write_page_index=True, + row_group_size=50, + ) + # Reading the cloudpickle-serialized extension back requires the opt-in + # autoload (set before any pyarrow read below, which reconstructs the type). + monkeypatch.setattr(tx, "_AUTOLOAD_CLOUDPICKLE_TENSOR_METADATA", True) + + # Confirm the footer really carries the ``ARROW:schema`` metadata whose + # (cloudpickle) value isn't valid UTF-8 — the case the crate used to crash on. + kv = pq.read_metadata(str(path)).metadata or {} + assert b"ARROW:schema" in kv + + rs, pa_tbl, native_decodes = _read_both_in_process([path], monkeypatch) + # The crate actually decoded it (didn't fall back to PyArrow). + assert native_decodes > 0 + assert rs.equals(pa_tbl) + assert isinstance(rs.schema.field("t").type, pa.ExtensionType) + + def test_arrow_rs_supported_gate(tmp_path): """Unit-check the fallback gate: local flat AND struct/list = supported; empty projection / unknown-not-on-disk column (no unified schema to @@ -1338,9 +1386,18 @@ def test_arrow_rs_supported_gate(tmp_path): # missing column; with no unified schema to null-fill from → fall back. assert reader._arrow_rs_supported(nested_frag, ["v.item"]) is False - # Unknown filesystem (neither local nor S3) → fall back. - reader_no_fs = ArrowRsParquetFileReader(filesystem=None) - assert reader_no_fs._arrow_rs_supported(flat_frag, None) is False + # ``filesystem=None`` is the default local filesystem → supported + # (see ``_filesystem_supported``). A genuinely foreign filesystem (neither + # local nor S3, e.g. a ``SubTreeFileSystem``) → fall back. + from pyarrow.fs import SubTreeFileSystem + + reader_default_fs = ArrowRsParquetFileReader(filesystem=None) + assert reader_default_fs._arrow_rs_supported(flat_frag, None) is True + + reader_foreign_fs = ArrowRsParquetFileReader( + filesystem=SubTreeFileSystem(str(tmp_path), LocalFileSystem()) + ) + assert reader_foreign_fs._arrow_rs_supported(flat_frag, None) is False # --------------------------------------------------------------------------- From e35e2163ed6087a19f16f4c5d75ef69cefb9c81a Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 15:08:46 -0700 Subject: [PATCH 034/135] [Data] release benchmark: log per-operator time / output bytes / decode USS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The release log's only memory metric is object-store peak, which can't see the decode-side working set the arrow-rs migration is about. Add `collect_operator_metrics(ds)` to benchmark.py: it walks the dataset stats and emits, per operator, wall/cpu/udf time, output rows/bytes, and `avg_max_uss_per_task_bytes` (per-task decode USS from `extra_metrics["average_max_uss_per_task"]`, Linux-only), plus top-level `read_*` convenience fields for the first Read operator. Wire it into read_and_consume_benchmark's `benchmark_fn` so every read/count/iter/write run carries the read operator's decode USS into the log — the metric that actually answers the arrow-rs-vs-PyArrow memory question. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- release/nightly_tests/dataset/benchmark.py | 50 +++++++++++++++++++ .../dataset/read_and_consume_benchmark.py | 8 +-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/release/nightly_tests/dataset/benchmark.py b/release/nightly_tests/dataset/benchmark.py index 28fea379b63b..2336eb672534 100644 --- a/release/nightly_tests/dataset/benchmark.py +++ b/release/nightly_tests/dataset/benchmark.py @@ -120,6 +120,56 @@ def collect_dataset_stats(ds: "ray.data.Dataset") -> Dict[str, Any]: } +def collect_operator_metrics(ds: "ray.data.Dataset") -> Dict[str, Any]: + """Per-operator time / output-bytes / decode-USS, for merging into a result dict. + + Surfaces numbers that otherwise live only on the Prometheus dashboard, not in the + release log or databricks: each operator's wall time, output size/rows, and + ``average_max_uss_per_task`` (per-task peak USS from ``MemoryProfiler``; Linux-only, + ``None`` on macOS). This isolates the read operator's cost from downstream compute + and exposes the decode-memory metric that the aggregate object-store peak cannot + see. Best-effort: returns a partial/empty dict rather than failing the benchmark. + + A ``read_*`` top-level convenience is filled from the first ``Read*`` operator so the + "parquet part" (read wall time + output bytes + decode USS) is a first-class field. + """ + from ray.data._internal.stats import DatasetStatsSummary + + def _sum(stat) -> Any: + return stat.sum if stat is not None else None + + out: Dict[str, Any] = {"operators_detail": []} + try: + summary = ds.get_stats_summary(detail=True) + for node in DatasetStatsSummary._collect_dataset_stats_summaries(summary): + extra = getattr(node, "extra_metrics", {}) or {} + uss = extra.get("average_max_uss_per_task") + for op in node.operators_stats or []: + out["operators_detail"].append( + { + "operator_name": op.operator_name, + "wall_time_s": _sum(op.wall_time), + "cpu_time_s": _sum(op.cpu_time), + "udf_time_s": _sum(op.udf_time), + "output_num_rows": _sum(op.output_num_rows), + "output_size_bytes": _sum(op.output_size_bytes), + "avg_max_uss_per_task_bytes": uss, + } + ) + for entry in out["operators_detail"]: + if "Read" in (entry["operator_name"] or ""): + out["read_operator_name"] = entry["operator_name"] + out["read_wall_time_s"] = entry["wall_time_s"] + out["read_output_size_bytes"] = entry["output_size_bytes"] + out["read_avg_max_uss_per_task_bytes"] = entry[ + "avg_max_uss_per_task_bytes" + ] + break + except Exception: + logger.warning("collect_operator_metrics failed", exc_info=True) + return out + + class RuntimeEnvSetupTracker: """Collects runtime environment creation times across the cluster. diff --git a/release/nightly_tests/dataset/read_and_consume_benchmark.py b/release/nightly_tests/dataset/read_and_consume_benchmark.py index e66c3a388b01..2a370ef9b2d8 100644 --- a/release/nightly_tests/dataset/read_and_consume_benchmark.py +++ b/release/nightly_tests/dataset/read_and_consume_benchmark.py @@ -3,7 +3,7 @@ import uuid from typing import Callable -from benchmark import Benchmark +from benchmark import Benchmark, collect_operator_metrics import ray from ray.data import SaveMode @@ -80,8 +80,10 @@ def benchmark_fn(): ds = read_fn(args.path) consume_fn(ds) - # Report arguments for the benchmark. - return vars(args) + # Report arguments for the benchmark, plus per-operator time / output bytes / + # decode-USS (isolates the read from downstream consume; surfaces the decode + # memory the object-store peak can't see). ``ds`` is still in scope here. + return {**vars(args), **collect_operator_metrics(ds)} if args.write_delta and args.write_delta_mode == "overwrite": # Populate the table once first (same source/scale as the timed run From 07f2cf066200210e24d739f38c7c99d1f41a8472 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 15:11:25 -0700 Subject: [PATCH 035/135] [Data] arrow-rs: single-node read probe for the Linux + S3 regression run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds release/nightly_tests/dataset/arrow_rs_probe/ — a self-contained harness to reproduce and optimize the two cases where arrow-rs was worse in the release run (imagenet time 1.67x, wide_schema mem 1.50x) on one node instead of a cluster: - read_probe.py: runs either V2 reader against a path (S3 presets for the two release reads) and reports wall time, worker cpu_over_wall (the CPU-bound-vs-IO diagnostic at --concurrency 1), and peak worker RSS/USS. USS is the metric of record and is Linux-only; the crate's page-sized S3 working set only engages on the S3 path, so the memory case must be run against real S3. - scale_sweep.py: local fixture sweeps that separate a scaling effect from the S3/Linux effect (imagenet bytes; wide_schema row-group size). - README.md: standalone Linux-workspace setup (crate build, Anyscale gotchas) + run commands + an allocator A/B, since this branch does not carry the full runbook. Working/measurement harness — not intended for the upstream PR. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../dataset/arrow_rs_probe/README.md | 95 +++++++ .../dataset/arrow_rs_probe/read_probe.py | 257 ++++++++++++++++++ .../dataset/arrow_rs_probe/scale_sweep.py | 150 ++++++++++ 3 files changed, 502 insertions(+) create mode 100644 release/nightly_tests/dataset/arrow_rs_probe/README.md create mode 100644 release/nightly_tests/dataset/arrow_rs_probe/read_probe.py create mode 100644 release/nightly_tests/dataset/arrow_rs_probe/scale_sweep.py diff --git a/release/nightly_tests/dataset/arrow_rs_probe/README.md b/release/nightly_tests/dataset/arrow_rs_probe/README.md new file mode 100644 index 000000000000..ad93cc9af983 --- /dev/null +++ b/release/nightly_tests/dataset/arrow_rs_probe/README.md @@ -0,0 +1,95 @@ +# arrow-rs read probe — Linux + S3 regression reproduction + +Single-node harness to measure the two cases where the arrow-rs Parquet reader was +worse than PyArrow in the release run (build 102757), so we can optimize them: + +| release test | axis | gap | why it needs Linux + S3 | +|---|---|---|---| +| `mix.8ds_equal_random_mix` (imagenet, many tiny row groups) | **time** | 1.67× | I/O-bound on S3 (many small serial range GETs). Faster than PyArrow on local disk at every scale — no network to expose it. | +| `wide_schema_pipeline_primitives` (5000 cols) | **memory** | 1.50× | The crate's page-sized working set only engages on the **S3** decode path; and per-worker USS is Linux-only. | + +Both are single-worker read properties, so one node + S3 reproduces them — no cluster. + +## Setup (fresh Linux workspace on branch `arrow-rs-parquet-reader-pr`) + +```bash +# 1. Repo + a commit-matched Ray nightly wheel (a "latest" wheel drifts from this +# branch's compiled protobufs and asserts "out of sync" at import). +git clone https://github.com/AarryaSaraf/ray.git ~/ray && cd ~/ray +git checkout arrow-rs-parquet-reader-pr +git remote add upstream https://github.com/ray-project/ray.git && git fetch upstream master --quiet + +uv venv --python 3.12 ~/ray/.venv && source ~/ray/.venv/bin/activate +# Pick the x86-64 manylinux nightly matching `git merge-base HEAD upstream/master`, +# install --no-deps, then re-link this branch's source: +uv pip install --no-deps +uv pip install "ray[data]" psutil +python python/ray/setup-dev.py -y # symlinks python/ray/ over the wheel + +# 2. Build the native crate for Linux (first time off macOS). +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && source "$HOME/.cargo/env" +uv pip install maturin +cd python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs +maturin build --release && uv pip install --force-reinstall --no-deps target/wheels/*.whl +cd ~/ray +``` + +### Anyscale-workspace gotchas (none are arrow-rs-related) +- **Run a private cluster:** `export RAY_ADDRESS=local` — never attach to the managed + cluster (different Ray version → version-check failure). +- **Re-activate the venv in every shell** (`source ~/ray/.venv/bin/activate`) — otherwise + `python` is the image's anaconda Ray (the Anyscale runtime), where this branch's + reader/crate/flags don't exist. Confirm with + `python -c "import ray.data, os; print(os.path.realpath(ray.data.__file__))"` → must + resolve into this checkout. +- If `ray.init()` hangs: `unset RAY_RUNTIME_ENV_HOOK RAY_RUNTIME_ENV_PLUGINS` and + `export RAY_task_events_report_interval_ms=0` (dodges a 2026-07 master task-event + SIGSEGV); check `/tmp/ray/session_latest/logs/runtime_env_agent.err` for import errors. + +## Run + +Confirm the S3 prefixes first (they drift): `aws s3 ls s3://ray-benchmark-data-internal-us-west-2/wide_schema/` +and `.../imagenet/`, and export AWS creds/region. Put the box in the bucket's region. + +```bash +cd release/nightly_tests/dataset/arrow_rs_probe +export RAY_ADDRESS=local + +# (A) CPU-bound-vs-IO diagnostic — force one read task, compare cpu_over_wall. +# ~1 => CPU-bound decode; <<1 => I/O-waiting on S3. +python read_probe.py --preset imagenet --reader pyarrow --concurrency 1 +python read_probe.py --preset imagenet --reader arrow_rs --concurrency 1 +python read_probe.py --preset wide_schema --reader pyarrow --concurrency 1 +python read_probe.py --preset wide_schema --reader arrow_rs --concurrency 1 + +# (B) Realistic memory — let it fan out; compare peak_uss_gb (the metric of record). +python read_probe.py --preset wide_schema --reader pyarrow +python read_probe.py --preset wide_schema --reader arrow_rs + +# (C) Allocator A/B on the arrow_rs run (no rebuild) — is any residual mem gap glibc +# arena retention rather than the decoder? +MALLOC_ARENA_MAX=2 python read_probe.py --preset wide_schema --reader arrow_rs +LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 python read_probe.py --preset wide_schema --reader arrow_rs +``` + +Local scale sweeps (no S3 — separates a scaling effect from the S3/Linux effect; on +Linux they also fill in `peak_uss_gb`): + +```bash +python scale_sweep.py imagenet # bytes sweep: does arrow_rs stay faster as data grows? +python scale_sweep.py wide # row-group-size sweep: USS ratio vs rg size +``` + +## What to look for +- **imagenet time:** if `cpu_over_wall` ≪ 1 on the S3 read, the gap is prefetch/fetch — + the fix is crate-level concurrent column-chunk prefetch within a row group (PyArrow's + `pre_buffer` issues parallel column GETs; the crate's windowed stream fetches serially), + or reading N row groups per task concurrently. +- **wide_schema memory:** compare `peak_uss_gb` (and Ray's `read_avg_max_uss_gb`). The + architectural expectation is arrow-rs **at or below** PyArrow once the S3 windowed path + engages, growing flat in row-group size while PyArrow grows with it. If arrow-rs is still + worse on Linux+S3, it's a genuine integration regression to chase there (not the macOS + allocator/RSS artifact the local sweep shows). + +For richer log output on a full release run, `collect_operator_metrics` (in +`../benchmark.py`) now emits per-operator wall/output-bytes/decode-USS. diff --git a/release/nightly_tests/dataset/arrow_rs_probe/read_probe.py b/release/nightly_tests/dataset/arrow_rs_probe/read_probe.py new file mode 100644 index 000000000000..87acc81039e0 --- /dev/null +++ b/release/nightly_tests/dataset/arrow_rs_probe/read_probe.py @@ -0,0 +1,257 @@ +#!/usr/bin/env python3 +"""Single-node read probe: arrow-rs vs PyArrow, reporting BOTH time and memory. + +Reproduces the *read* portion of a release test on ONE node so we can measure and +optimize the two cases where arrow-rs was worse in the release run without a +multi-node cluster: + - mix.8ds_equal_random_mix : time 1.67x worse (imagenet, many tiny row groups, S3) + - wide_schema_pipeline_primitives : mem 1.50x worse (5000 columns, S3) +Both effects (read wall time and per-worker decode memory) are single-worker +properties, so one node + S3 is enough. + +IMPORTANT — why this must run on Linux + real S3: + * The crate's byte-budgeted windowed-async decode (the "working set is a page, + not the whole row group" property) only runs on the S3 path. On local disk a + lone big row group is read whole (K=1), so the memory win does not appear + locally — you MUST point --path at S3 to exercise it. + * `peak_uss_gb` (the real per-worker private cost) is populated on Linux only; + it stays None on macOS (shared pages make RSS misleading there). + +For each reader it reports: + - wall_s : wall time of read + consume + - worker_cpu_s : summed CPU seconds across Ray worker processes during the read + - cpu_over_wall : worker_cpu_s / wall_s. The diagnostic (use --concurrency 1): + ~1 => CPU-bound decode -> optimize decode + <<1 => I/O-waiting on S3 -> optimize prefetch + - peak_rss_gb : peak summed RSS across Ray workers + - peak_uss_gb : peak summed USS (Linux only) -- the metric of record + - read_wall_s / read_output_gb / read_avg_max_uss_gb : from Ray's own op stats + +Run each reader in its OWN process (Ray + the crate load once per process): + + # CPU-bound-vs-IO diagnostic: force a single read task + python read_probe.py --preset wide_schema --reader pyarrow --concurrency 1 + python read_probe.py --preset wide_schema --reader arrow_rs --concurrency 1 + + # Realistic memory: let it fan out + python read_probe.py --preset imagenet --reader arrow_rs + +Presets encode the release-test read (path + columns); override with --path/--columns +(the exact S3 prefixes drift — confirm with `aws s3 ls` on the box). Set +MALLOC_ARENA_MAX=2, or LD_PRELOAD a jemalloc .so, to A/B the allocator on the +arrow_rs run. +""" +import argparse +import os +import threading +import time +from typing import Any, Dict, List, Optional + +import psutil + +PRESETS = { + # wide_schema_pipeline_primitives: ~550MB, 5000 columns. mem was 1.50x worse. + # data_type variants exist under .../wide_schema/{primitives,tensors,objects,nested_structs}. + "wide_schema": { + "path": "s3://ray-benchmark-data-internal-us-west-2/wide_schema/primitives", + "columns": None, + }, + # mix.8ds_equal_random_mix reads imagenet per dataset; the read is the imagenet + # decode over many tiny row groups (the K=1 case). time was 1.67x worse. + "imagenet": { + "path": "s3://ray-benchmark-data-internal-us-west-2/imagenet/parquet", + "columns": ["image", "label"], + }, +} + + +def parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--preset", choices=list(PRESETS), default=None) + p.add_argument("--path", type=str, default=None) + p.add_argument("--columns", nargs="+", default=None) + p.add_argument( + "--reader", + choices=["pyarrow", "arrow_rs"], + required=True, + help="Which V2 reader to use (sets use_arrow_rs_parquet_reader).", + ) + p.add_argument( + "--concurrency", + type=int, + default=None, + help="Cap read tasks. Use 1 for the CPU-bound-vs-IO diagnostic.", + ) + p.add_argument( + "--consume", choices=["iter_bundles", "count"], default="iter_bundles" + ) + p.add_argument("--sample-hz", type=float, default=10.0) + args = p.parse_args() + if args.preset: + args.path = args.path or PRESETS[args.preset]["path"] + if args.columns is None: + args.columns = PRESETS[args.preset]["columns"] + if not args.path: + p.error("need --path or --preset") + return args + + +class WorkerMemSampler: + """Samples summed RSS/USS/CPU across Ray worker processes at a fixed rate. + + Ray runs each read task in a separate ``ray::`` worker process, so decode memory + lives there, not in this driver. We match those processes by cmdline and track the + peak of their *summed* RSS (and USS on Linux) plus total CPU consumed while sampling. + """ + + def __init__(self, interval_s: float): + self._interval_s = interval_s + self._stop = threading.Event() + self._thread: Optional[threading.Thread] = None + self.peak_rss = 0 + self.peak_uss = 0 # stays 0 if USS is unavailable (macOS) + self._uss_ok = True + # Track CPU as (last_seen_total) per pid, summed into cpu_seconds on exit. + self._cpu_last: Dict[int, float] = {} + self.cpu_seconds = 0.0 + + def _ray_workers(self) -> List[psutil.Process]: + out = [] + for proc in psutil.process_iter(["name", "cmdline"]): + try: + cmd = " ".join(proc.info.get("cmdline") or []) + if "ray::" in cmd or "raylet" in (proc.info.get("name") or ""): + out.append(proc) + except (psutil.NoSuchProcess, psutil.AccessDenied): + continue + return out + + def _sample(self): + rss = uss = 0 + for proc in self._ray_workers(): + try: + if self._uss_ok: + try: + mi = proc.memory_full_info() + uss += getattr(mi, "uss", 0) + rss += mi.rss + except (psutil.AccessDenied, NotImplementedError): + self._uss_ok = False + rss += proc.memory_info().rss + else: + rss += proc.memory_info().rss + ct = proc.cpu_times() + total = ct.user + ct.system + pid = proc.pid + prev = self._cpu_last.get(pid) + # Only accumulate forward deltas (new pid or grew); ignore pid reuse noise. + if prev is not None and total >= prev: + self.cpu_seconds += total - prev + self._cpu_last[pid] = total + except (psutil.NoSuchProcess, psutil.AccessDenied): + continue + self.peak_rss = max(self.peak_rss, rss) + if self._uss_ok: + self.peak_uss = max(self.peak_uss, uss) + + def _run(self): + while not self._stop.wait(self._interval_s): + self._sample() + + def __enter__(self): + self._sample() + self._thread = threading.Thread(target=self._run, daemon=True) + self._thread.start() + return self + + def __exit__(self, *exc): + self._stop.set() + if self._thread: + self._thread.join() + self._sample() + + +def _gb(b: Optional[float]) -> Optional[float]: + return round(b / (1024**3), 4) if b else b + + +def collect_read_op_metrics(ds) -> Dict[str, Any]: + """Pull the read operator's wall time / output bytes / avg-max-USS from Ray stats.""" + from ray.data._internal.stats import DatasetStatsSummary + + out: Dict[str, Any] = {} + try: + summary = ds.get_stats_summary(detail=True) + for node in DatasetStatsSummary._collect_dataset_stats_summaries(summary): + extra = getattr(node, "extra_metrics", {}) or {} + uss = extra.get("average_max_uss_per_task") + for op in node.operators_stats or []: + if "Read" in (op.operator_name or ""): + out["read_operator_name"] = op.operator_name + out["read_wall_s"] = op.wall_time.sum if op.wall_time else None + out["read_output_gb"] = _gb( + op.output_size_bytes.sum if op.output_size_bytes else None + ) + out["read_avg_max_uss_gb"] = _gb(uss) + return out + except Exception as e: # best-effort + out["read_op_metrics_error"] = repr(e) + return out + + +def main(): + args = parse_args() + + import ray + from ray.data.context import DataContext + + ctx = DataContext.get_current() + ctx.use_datasource_v2 = True + ctx.use_arrow_rs_parquet_reader = args.reader == "arrow_rs" + + ray.init(ignore_reinit_error=True) + + read_kwargs: Dict[str, Any] = {} + if args.columns: + read_kwargs["columns"] = args.columns + if args.concurrency is not None: + read_kwargs["concurrency"] = args.concurrency + read_kwargs["override_num_blocks"] = args.concurrency + + print( + f"reader={args.reader} path={args.path} columns={args.columns} " + f"concurrency={args.concurrency} arena_max={os.environ.get('MALLOC_ARENA_MAX')} " + f"ld_preload={os.environ.get('LD_PRELOAD')}" + ) + + try: + with WorkerMemSampler(1.0 / args.sample_hz) as sampler: + t0 = time.perf_counter() + ds = ray.data.read_parquet(args.path, **read_kwargs) + if args.consume == "count": + ds.count() + else: + for _ in ds.iter_internal_ref_bundles(): + pass + wall = time.perf_counter() - t0 + + result = { + "reader": args.reader, + "wall_s": round(wall, 3), + "worker_cpu_s": round(sampler.cpu_seconds, 3), + "cpu_over_wall": round(sampler.cpu_seconds / wall, 3) if wall else None, + "peak_rss_gb": _gb(sampler.peak_rss), + "peak_uss_gb": _gb(sampler.peak_uss) if sampler.peak_uss else None, + **collect_read_op_metrics(ds), + } + print("\n=== RESULT ===") + for k, v in result.items(): + print(f" {k}: {v}") + finally: + # Shut Ray down cleanly so the next reader's process does not find (and the + # sampler does not sum) a stale second Ray instance's workers. + ray.shutdown() + + +if __name__ == "__main__": + main() diff --git a/release/nightly_tests/dataset/arrow_rs_probe/scale_sweep.py b/release/nightly_tests/dataset/arrow_rs_probe/scale_sweep.py new file mode 100644 index 000000000000..40bd5f0bbb73 --- /dev/null +++ b/release/nightly_tests/dataset/arrow_rs_probe/scale_sweep.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +"""Scale sweep: is the arrow-rs regression an issue of SCALE? + +Generates local parquet fixtures at increasing scale for the two worse-in-release +layouts and runs BOTH readers via read_probe.py at --concurrency 1. Use this to +separate a scaling effect from an environment (S3/Linux) effect. + + imagenet : scale total bytes, tiny row groups fixed. If arrow_rs stays faster as + data grows, the release time gap is pure S3 network (not scale). On the + Mac it stayed 0.65-0.82x of pyarrow at 0.4-2.6 GB -> confirmed network. + wide : scale ROW-GROUP SIZE (the per-rg decode transient). On the Mac the + arrow_rs/pyarrow RSS ratio climbed 0.67x -> 1.04x as rg grew from 200 to + 4000 rows -> the mem regression's lever is row-group size, not row count. + On Linux read `peak_uss_gb` (populated there) for the real magnitude. + +Run: python scale_sweep.py where case in {imagenet, wide} +Fixtures land under $SWEEP_DIR (default /tmp/arrow_rs_sweep); each run prints a table. +""" +import json +import os +import subprocess +import sys + +import numpy as np +import pyarrow as pa +import pyarrow.parquet as pq + +SWEEP = os.environ.get("SWEEP_DIR", "/tmp/arrow_rs_sweep") +PROBE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "read_probe.py") +PY = sys.executable +os.makedirs(SWEEP, exist_ok=True) + + +def gen_imagenet(tag, n_rows, blob_kb=48, rg=32, n_files=4): + d = os.path.join(SWEEP, f"imagenet_{tag}") + if os.path.exists(os.path.join(d, "_done")): + return d + os.makedirs(d, exist_ok=True) + rng = np.random.default_rng(0) + per = n_rows // n_files + for f in range(n_files): + images = [rng.bytes(blob_kb * 1024) for _ in range(per)] + labels = rng.integers(0, 1000, per, dtype=np.int64) + ids = np.arange(f * per, (f + 1) * per, dtype=np.int64) + t = pa.table( + { + "id": ids, + "image": pa.array(images, type=pa.binary()), + "label": pa.array(labels), + } + ) + pq.write_table( + t, + os.path.join(d, f"part{f}.parquet"), + write_page_index=True, + row_group_size=rg, + ) + open(os.path.join(d, "_done"), "w").close() + print( + f" gen imagenet_{tag}: {n_rows} rows ~{n_rows*blob_kb/1024:.0f}MB " + f"rg={rg} -> ~{per//rg} rgs/file x{n_files}", + flush=True, + ) + return d + + +def gen_wide(tag, n_rows, n_cols=5000, str_len=100, rg=200): + d = os.path.join(SWEEP, f"wide_{tag}") + if os.path.exists(os.path.join(d, "_done")): + return d + os.makedirs(d, exist_ok=True) + base = np.array(["x" * str_len] * n_rows, dtype=object) + cols = {"id": pa.array(np.arange(n_rows, dtype=np.int64))} + for c in range(n_cols): + cols[f"c{c}"] = pa.array(base, type=pa.string()) + t = pa.table(cols) + pq.write_table( + t, os.path.join(d, "wide.parquet"), write_page_index=True, row_group_size=rg + ) + open(os.path.join(d, "_done"), "w").close() + print( + f" gen wide_{tag}: {n_rows}x{n_cols} ~{n_rows*n_cols*str_len/1e6:.0f}MB rg={rg}", + flush=True, + ) + return d + + +def run_probe(path, reader, columns=None): + cmd = [PY, PROBE, "--path", path, "--reader", reader, "--concurrency", "1"] + if columns: + cmd += ["--columns", *columns] + out = subprocess.run(cmd, capture_output=True, text=True, env=dict(os.environ)) + res = {} + in_result = False + for line in out.stdout.splitlines(): + if "=== RESULT ===" in line: + in_result = True + continue + if in_result and ":" in line: + k, v = line.strip().split(":", 1) + res[k.strip()] = v.strip() + if not res: + print( + f" PROBE FAIL ({reader}) rc={out.returncode}\n" + f"{out.stdout[-800:]}\n{out.stderr[-800:]}" + ) + return res + + +def sweep_imagenet(): + print("=== imagenet scale sweep (cols=[image,label], tiny rgs) ===", flush=True) + scales = [("s", 8000), ("m", 24000), ("l", 56000)] # ~375MB, ~1.1GB, ~2.6GB + rows = [] + for tag, n in scales: + d = gen_imagenet(tag, n) + for reader in ("pyarrow", "arrow_rs"): + r = run_probe(d, reader, columns=["image", "label"]) + rows.append((tag, n, reader, r)) + print( + f" {tag:>2} n={n:<6} {reader:<8} wall={r.get('wall_s')} " + f"rss={r.get('peak_rss_gb')} uss={r.get('peak_uss_gb')} " + f"cpu/wall={r.get('cpu_over_wall')}", + flush=True, + ) + return rows + + +def sweep_wide(): + print("=== wide_schema row-group-size sweep (5000 cols) ===", flush=True) + variants = [("rg200", 4000, 200), ("rg1000", 4000, 1000), ("rg4000", 4000, 4000)] + rows = [] + for tag, n, rg in variants: + d = gen_wide(tag, n, rg=rg) + for reader in ("pyarrow", "arrow_rs"): + r = run_probe(d, reader) + rows.append((tag, rg, reader, r)) + print( + f" {tag:<7} rg={rg:<5} {reader:<8} wall={r.get('wall_s')} " + f"rss={r.get('peak_rss_gb')} uss={r.get('peak_uss_gb')} " + f"read_uss={r.get('read_avg_max_uss_gb')}", + flush=True, + ) + return rows + + +if __name__ == "__main__": + case = sys.argv[1] if len(sys.argv) > 1 else "imagenet" + rows = sweep_imagenet() if case == "imagenet" else sweep_wide() + print("\n=== JSON ===") + print(json.dumps([{"tag": t, "k": k, "reader": rd, **r} for t, k, rd, r in rows])) From 01f39f3ecd25de29519cabaa660d1ae9228a84b5 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 16:03:51 -0700 Subject: [PATCH 036/135] [Data] TESTING (revert before PR): S3 fixture generator + A/B matrix runner for arrow-rs probe Two scratch scripts to reproduce the two release regressions on a bucket we own: - gen_s3_fixtures.py: writes wide_schema (1 big row group/file) + imagenet (many tiny row groups) layouts to S3 via aws s3 sync. - run_matrix.py: runs the full diag/mem/alloc A/B matrix, one process per cell, tees per-cell logs, prints arrow_rs/pyarrow ratios. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../dataset/arrow_rs_probe/gen_s3_fixtures.py | 162 ++++++++++ .../dataset/arrow_rs_probe/run_matrix.py | 284 ++++++++++++++++++ 2 files changed, 446 insertions(+) create mode 100644 release/nightly_tests/dataset/arrow_rs_probe/gen_s3_fixtures.py create mode 100644 release/nightly_tests/dataset/arrow_rs_probe/run_matrix.py diff --git a/release/nightly_tests/dataset/arrow_rs_probe/gen_s3_fixtures.py b/release/nightly_tests/dataset/arrow_rs_probe/gen_s3_fixtures.py new file mode 100644 index 000000000000..7d413490f6f8 --- /dev/null +++ b/release/nightly_tests/dataset/arrow_rs_probe/gen_s3_fixtures.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 +"""Generate the two release-test Parquet layouts on OUR S3 bucket. + +The release regressions live on two layouts we can't tune in the shared bucket, so +we recreate them on a scratch bucket we own (fill/empty at will) and point the probe +at them: + + wide -> wide_schema_pipeline_primitives : many columns, ONE big row group per file. + This is the K=1 lone-big-row-group case where the crate's byte-budgeted + windowed-async S3 decode is supposed to keep the working set to a page + while PyArrow materializes the whole decoded row group. mem was 1.50x worse. + img -> imagenet (mix.8ds_equal_random_mix) : blob column, MANY tiny row groups. + This is the I/O-bound-on-S3 case (many small serial range GETs). time 1.67x. + +Data is written locally then `aws s3 sync`d up (more robust than pyarrow's S3 +region/creds handling). Requires: aws CLI on PATH + creds/region exported, and +write_page_index=True (the crate's page-index requirement). + + python gen_s3_fixtures.py --bucket s3://arrowrs-bench-21f6c795 + python gen_s3_fixtures.py --bucket s3://... --cases wide # just one layout + python gen_s3_fixtures.py --bucket s3://... --wide-files 8 --wide-rows 1500 + +Prints the exact --path values to hand to run_matrix.py at the end. +""" +import argparse +import os +import shutil +import subprocess +import sys + +import numpy as np +import pyarrow as pa +import pyarrow.parquet as pq + +# A pool of distinct, incompressible-ish strings so Snappy can't crush the fixture to +# nothing -- we want on-disk (== S3 fetch) bytes to be non-trivial, not just decoded size. +_POOL_SIZE = 4096 + + +def _str_pool(rng, str_len): + alphabet = np.frombuffer(b"abcdefghijklmnopqrstuvwxyz0123456789", dtype="S1") + idx = rng.integers(0, len(alphabet), size=(_POOL_SIZE, str_len)) + return np.array([alphabet[row].tobytes().decode() for row in idx], dtype=object) + + +def gen_wide(d, n_rows, n_cols, str_len, rg, n_files): + """Wide schema, ONE big row group per file (rg == n_rows) -> the K=1 S3 case.""" + os.makedirs(d, exist_ok=True) + rng = np.random.default_rng(0) + pool = _str_pool(rng, str_len) + for f in range(n_files): + cols = {"id": pa.array(np.arange(f * n_rows, (f + 1) * n_rows, dtype=np.int64))} + for c in range(n_cols): + picks = pool[rng.integers(0, _POOL_SIZE, size=n_rows)] + cols[f"c{c}"] = pa.array(picks, type=pa.string()) + pq.write_table( + pa.table(cols), + os.path.join(d, f"part{f}.parquet"), + write_page_index=True, + row_group_size=rg, # >= n_rows -> a single row group + ) + print( + f" wide part{f}: {n_rows}x{n_cols} str{str_len} " f"rg={rg} (1 rg/file)", + flush=True, + ) + + +def gen_imagenet(d, n_rows, blob_kb, rg, n_files): + """Blob column, MANY tiny row groups -> the S3-IO-bound case.""" + os.makedirs(d, exist_ok=True) + rng = np.random.default_rng(0) + per = n_rows // n_files + for f in range(n_files): + images = [rng.bytes(blob_kb * 1024) for _ in range(per)] + labels = rng.integers(0, 1000, per, dtype=np.int64) + ids = np.arange(f * per, (f + 1) * per, dtype=np.int64) + pq.write_table( + pa.table( + { + "id": ids, + "image": pa.array(images, type=pa.binary()), + "label": pa.array(labels), + } + ), + os.path.join(d, f"part{f}.parquet"), + write_page_index=True, + row_group_size=rg, + ) + print( + f" img part{f}: {per} rows blob={blob_kb}KB rg={rg} " + f"-> ~{per // rg} rgs/file", + flush=True, + ) + + +def sync_up(local_dir, s3_prefix): + print(f" aws s3 sync {local_dir} -> {s3_prefix}", flush=True) + subprocess.run( + ["aws", "s3", "sync", "--only-show-errors", local_dir, s3_prefix], + check=True, + ) + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--bucket", required=True, help="e.g. s3://arrowrs-bench-21f6c795") + p.add_argument("--cases", default="wide,img", help="comma list of {wide,img}") + p.add_argument("--local-tmp", default="/tmp/arrow_rs_s3_gen") + p.add_argument("--keep-local", action="store_true", help="don't delete local tmp") + # wide knobs + p.add_argument("--wide-rows", type=int, default=1000) + p.add_argument("--wide-cols", type=int, default=5000) + p.add_argument("--wide-str-len", type=int, default=100) + p.add_argument("--wide-files", type=int, default=4) + # imagenet knobs + p.add_argument("--img-rows", type=int, default=24000) + p.add_argument("--img-blob-kb", type=int, default=48) + p.add_argument("--img-rg", type=int, default=32) + p.add_argument("--img-files", type=int, default=8) + args = p.parse_args() + + bucket = args.bucket.rstrip("/") + cases = [c.strip() for c in args.cases.split(",") if c.strip()] + paths = {} + + if "wide" in cases: + print("=== gen wide (1 big row group/file) ===", flush=True) + d = os.path.join(args.local_tmp, "wide_schema", "primitives") + gen_wide( + d, + args.wide_rows, + args.wide_cols, + args.wide_str_len, + rg=args.wide_rows, # one row group per file + n_files=args.wide_files, + ) + s3 = f"{bucket}/wide_schema/primitives" + sync_up(d, s3) + paths["wide"] = s3 + + if "img" in cases: + print("=== gen imagenet (many tiny row groups) ===", flush=True) + d = os.path.join(args.local_tmp, "imagenet", "parquet") + gen_imagenet(d, args.img_rows, args.img_blob_kb, args.img_rg, args.img_files) + s3 = f"{bucket}/imagenet/parquet" + sync_up(d, s3) + paths["img"] = s3 + + if not args.keep_local and os.path.isdir(args.local_tmp): + shutil.rmtree(args.local_tmp, ignore_errors=True) + + print("\n=== S3 fixtures ready ===") + for k, v in paths.items(): + print(f" {k}: {v}") + print("\nNext:") + wide = paths.get("wide", "") + img = paths.get("img", "") + print(f" python run_matrix.py --wide-path {wide} --imagenet-path {img}") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/release/nightly_tests/dataset/arrow_rs_probe/run_matrix.py b/release/nightly_tests/dataset/arrow_rs_probe/run_matrix.py new file mode 100644 index 000000000000..da104f1b049a --- /dev/null +++ b/release/nightly_tests/dataset/arrow_rs_probe/run_matrix.py @@ -0,0 +1,284 @@ +#!/usr/bin/env python3 +"""Run the full arrow_rs-vs-PyArrow A/B matrix against S3, log everything, tabulate. + +One place to reproduce both release regressions instead of typing the README's A/B/C +blocks by hand. Each cell runs read_probe.py in its OWN process (Ray + the crate load +once per process, and the mem sampler must not see a stale Ray instance), captures full +stdout+stderr to a per-cell log file, parses the RESULT block, and prints a comparison +table with arrow_rs/pyarrow ratios so you can see at a glance what is slow / heavy. + +The matrix: + [diag] concurrency=1, both layouts, both readers -> cpu_over_wall + imagenet ~1 => CPU-bound decode ; <<1 => I/O-waiting on S3 (prefetch is the fix) + [mem] wide fanned out, both readers -> peak_uss_gb / read_avg_max_uss_gb + the memory metric of record (Linux USS). expect arrow_rs at-or-below PyArrow. + [alloc] wide arrow_rs, allocator variants -> is any residual gap glibc arenas? + baseline vs MALLOC_ARENA_MAX=2 vs LD_PRELOAD jemalloc (skipped if .so absent). + + python run_matrix.py --wide-path s3://.../wide_schema/primitives \\ + --imagenet-path s3://.../imagenet/parquet + python run_matrix.py --wide-path ... --imagenet-path ... --skip alloc # subset + python run_matrix.py --wide-path ... --imagenet-path ... --repeat 3 # median of N + +Assumes: venv active, RAY_ADDRESS=local, AWS creds/region exported, box in bucket region. +""" +import argparse +import glob +import json +import os +import subprocess +import sys +import time + +PROBE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "read_probe.py") +PY = sys.executable + +# Common jemalloc locations on Debian/Ubuntu (Anyscale base image). +_JEMALLOC_GLOBS = [ + "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2", + "/usr/lib/x86_64-linux-gnu/libjemalloc.so", + "/usr/lib/libjemalloc.so.2", +] + + +def find_jemalloc(): + for g in _JEMALLOC_GLOBS: + hits = glob.glob(g) + if hits: + return hits[0] + return None + + +def run_cell(logdir, name, path, reader, concurrency, columns, extra_env): + """Run one read_probe.py invocation; tee output to a log; return parsed RESULT dict.""" + cmd = [PY, PROBE, "--path", path, "--reader", reader] + if concurrency is not None: + cmd += ["--concurrency", str(concurrency)] + if columns: + cmd += ["--columns", *columns] + + env = dict(os.environ) + env.update(extra_env) + + logpath = os.path.join(logdir, f"{name}.log") + t0 = time.perf_counter() + proc = subprocess.run(cmd, capture_output=True, text=True, env=env) + dur = time.perf_counter() - t0 + + with open(logpath, "w") as fh: + fh.write(f"# cmd: {' '.join(cmd)}\n") + fh.write(f"# extra_env: {extra_env}\n") + fh.write(f"# wall_including_startup_s: {dur:.1f}\n") + fh.write("# ---- STDOUT ----\n") + fh.write(proc.stdout) + fh.write("\n# ---- STDERR ----\n") + fh.write(proc.stderr) + + res = {} + in_result = False + for line in proc.stdout.splitlines(): + if "=== RESULT ===" in line: + in_result = True + continue + if in_result and ":" in line: + k, v = line.strip().split(":", 1) + res[k.strip()] = v.strip() + if not res: + print( + f" !! {name} PROBE FAIL rc={proc.returncode} (see {logpath})\n" + f" {proc.stderr.strip()[-400:]}", + flush=True, + ) + else: + print( + f" {name:<34} wall={res.get('wall_s')} " + f"cpu/wall={res.get('cpu_over_wall')} " + f"uss={res.get('peak_uss_gb')} rss={res.get('peak_rss_gb')}", + flush=True, + ) + return res + + +def _num(res, key): + try: + return float(res.get(key)) + except (TypeError, ValueError): + return None + + +def median_cell(logdir, name, repeat, **kw): + """Run a cell `repeat` times, return the run whose wall_s is the median.""" + runs = [] + for i in range(repeat): + tag = name if repeat == 1 else f"{name}.r{i}" + runs.append(run_cell(logdir, tag, **kw)) + good = [r for r in runs if r] + if not good: + return {} + good.sort(key=lambda r: _num(r, "wall_s") or float("inf")) + return good[len(good) // 2] + + +def ratio(a, b): + if a is None or b is None or b == 0: + return None + return round(a / b, 3) + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--wide-path", required=True) + p.add_argument("--imagenet-path", required=True) + p.add_argument("--imagenet-columns", nargs="+", default=["image", "label"]) + p.add_argument( + "--outdir", default=None, help="log dir (default ./matrix_runs/)" + ) + p.add_argument("--repeat", type=int, default=1, help="runs per cell, report median") + p.add_argument( + "--skip", + default="", + help="comma list of stages to skip: diag,mem,alloc", + ) + args = p.parse_args() + + skip = {s.strip() for s in args.skip.split(",") if s.strip()} + ts = time.strftime("%Y%m%d_%H%M%S") + outdir = args.outdir or os.path.join( + os.path.dirname(os.path.abspath(__file__)), "matrix_runs", ts + ) + os.makedirs(outdir, exist_ok=True) + print(f"logs -> {outdir}\n", flush=True) + + rows = {} # name -> result dict + + def cell(name, **kw): + rows[name] = median_cell(outdir, name, args.repeat, **kw) + + # -------- [diag] cpu_over_wall @ concurrency=1 -------- + if "diag" not in skip: + print("=== [diag] cpu_over_wall @ concurrency=1 ===", flush=True) + for reader in ("pyarrow", "arrow_rs"): + cell( + f"diag.imagenet.{reader}", + path=args.imagenet_path, + reader=reader, + concurrency=1, + columns=args.imagenet_columns, + extra_env={}, + ) + cell( + f"diag.wide.{reader}", + path=args.wide_path, + reader=reader, + concurrency=1, + columns=None, + extra_env={}, + ) + + # -------- [mem] wide fanned out -------- + if "mem" not in skip: + print("=== [mem] wide fanned out (peak_uss_gb) ===", flush=True) + for reader in ("pyarrow", "arrow_rs"): + cell( + f"mem.wide.{reader}", + path=args.wide_path, + reader=reader, + concurrency=None, + columns=None, + extra_env={}, + ) + + # -------- [alloc] allocator A/B on wide arrow_rs -------- + if "alloc" not in skip: + print("=== [alloc] wide arrow_rs allocator A/B ===", flush=True) + cell( + "alloc.baseline", + path=args.wide_path, + reader="arrow_rs", + concurrency=None, + columns=None, + extra_env={}, + ) + cell( + "alloc.arena2", + path=args.wide_path, + reader="arrow_rs", + concurrency=None, + columns=None, + extra_env={"MALLOC_ARENA_MAX": "2"}, + ) + jem = find_jemalloc() + if jem: + cell( + "alloc.jemalloc", + path=args.wide_path, + reader="arrow_rs", + concurrency=None, + columns=None, + extra_env={"LD_PRELOAD": jem}, + ) + else: + print( + " (skip alloc.jemalloc: no libjemalloc.so found; " + "`apt-get install -y libjemalloc2` to enable)", + flush=True, + ) + + # -------- summary -------- + print("\n=================== SUMMARY (arrow_rs / pyarrow) ===================") + + def pair(prefix): + pa_r, ar_r = rows.get(f"{prefix}.pyarrow", {}), rows.get( + f"{prefix}.arrow_rs", {} + ) + for metric, label in [ + ("wall_s", "wall_s"), + ("cpu_over_wall", "cpu/wall"), + ("peak_uss_gb", "peak_uss_gb"), + ("read_avg_max_uss_gb", "read_uss_gb"), + ("peak_rss_gb", "peak_rss_gb"), + ]: + a, b = _num(ar_r, metric), _num(pa_r, metric) + if a is None and b is None: + continue + r = ratio(a, b) + flag = "" + if r is not None and metric in ( + "wall_s", + "peak_uss_gb", + "read_avg_max_uss_gb", + ): + flag = " <-- WORSE" if r > 1.05 else (" <-- win" if r < 0.95 else "") + print( + f" {prefix:<16} {label:<14} " + f"pyarrow={b} arrow_rs={a} ratio={r}{flag}" + ) + + if "diag" not in skip: + print( + "[diag imagenet] cpu/wall<<1 on the S3 read => I/O-bound (prefetch is the fix)" + ) + pair("diag.imagenet") + print("[diag wide]") + pair("diag.wide") + if "mem" not in skip: + print("[mem wide] the metric of record: peak_uss_gb / read_uss_gb") + pair("mem.wide") + if "alloc" not in skip: + print("[alloc wide arrow_rs] is residual mem gap glibc arena retention?") + base = _num(rows.get("alloc.baseline", {}), "peak_uss_gb") + for variant in ("alloc.arena2", "alloc.jemalloc"): + v = _num(rows.get(variant, {}), "peak_uss_gb") + if v is not None: + print( + f" {variant:<16} peak_uss_gb={v} " + f"vs baseline={base} ratio={ratio(v, base)}" + ) + + with open(os.path.join(outdir, "summary.json"), "w") as fh: + json.dump(rows, fh, indent=2) + print(f"\nfull JSON + per-cell logs in {outdir}") + + +if __name__ == "__main__": + main() From f6c36fa16ce0a4dfad075432da8163a93982983d Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 16:27:56 -0700 Subject: [PATCH 037/135] [Data] TESTING (revert before PR): one-shot setup.sh for arrow-rs S3 probe Ports the dev-branch memtrace setup.sh next to the probe scripts so a fresh workspace is a single command after clone: commit-matched Ray nightly + setup-dev symlink, rustup + maturin crate build, aiohttp/awscli/psutil, end-to-end verify. Tail now points at gen_s3_fixtures.py + run_matrix.py and exports a Ray memory monitor guard (threshold 0.8) so an over-allocating read task is killed before the OS OOM-killer takes down the raylet and terminates the workspace. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../dataset/arrow_rs_probe/setup.sh | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100755 release/nightly_tests/dataset/arrow_rs_probe/setup.sh diff --git a/release/nightly_tests/dataset/arrow_rs_probe/setup.sh b/release/nightly_tests/dataset/arrow_rs_probe/setup.sh new file mode 100755 index 000000000000..ad595ff7ff5f --- /dev/null +++ b/release/nightly_tests/dataset/arrow_rs_probe/setup.sh @@ -0,0 +1,176 @@ +#!/usr/bin/env bash +# --------------------------------------------------------------------------- +# One-shot environment setup for the arrow-rs Linux + S3 read probe. +# +# Brings a fresh box (Linux x86-64, or macOS/arm64 for dev) to the point where you +# can run gen_s3_fixtures.py and run_matrix.py in this directory, by: +# 1. ensuring a Python 3.12 venv (uv-managed), +# 2. installing a Ray nightly wheel matching this branch's base commit + symlinking +# THIS repo's python/ray over it (so the arrow-rs reader source is live) — a +# "latest" wheel drifts from the branch's compiled protobufs and asserts +# "out of sync" at import. Skip with SKIP_RAY=1. +# 3. installing the Rust toolchain (rustup) + maturin, +# 4. building the native crate `ray_data_arrow_rs` into the venv, +# 5. installing probe deps (psutil, numpy, pyarrow, aiohttp, awscli), +# 6. verifying the arrow-rs read path actually engages end to end. +# +# Idempotent: re-running skips work already done. Everything goes into the venv / +# ~/.cargo — nothing touches the system Python. This is the whole fresh-workspace +# recovery: clone the branch, then run this. +# +# Usage (from anywhere in the checkout): +# bash release/nightly_tests/dataset/arrow_rs_probe/setup.sh +# +# Knobs (env vars): +# RAY_VENV= venv to use/create (default: /.venv) +# RAY_WHEEL_URL= Ray nightly wheel to install (default: cp312 linux/mac) +# SKIP_RAY=1 don't touch Ray (already installed + symlinked) +# SKIP_APT=1 don't apt-get build deps (build-essential, python3-dev) +# SKIP_CRATE=1 don't (re)build the Rust crate +# --------------------------------------------------------------------------- +set -euo pipefail + +# --- locate the repo (this script lives at /release/nightly_tests/dataset/arrow_rs_probe) --- +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO="$(cd "$SCRIPT_DIR/../../../.." && pwd)" +CRATE="$REPO/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs" +RAY_VENV="${RAY_VENV:-$REPO/.venv}" +OS="$(uname -s)"; ARCH="$(uname -m)" + +say() { printf '\n\033[1;36m==> %s\033[0m\n' "$*"; } + +say "repo=$REPO venv=$RAY_VENV os=$OS/$ARCH" + +# --- 0. system build deps (Linux only; the crate links libpython + needs a C toolchain) --- +if [ "$OS" = "Linux" ] && [ "${SKIP_APT:-0}" != "1" ] && command -v apt-get >/dev/null 2>&1; then + say "apt: build-essential + python3-dev + curl (sudo)" + sudo apt-get update -qq + sudo apt-get install -y -qq build-essential python3-dev curl pkg-config +fi + +# --- 1. uv + venv --- +if ! command -v uv >/dev/null 2>&1; then + say "installing uv (official installer)" + curl -LsSf https://astral.sh/uv/install.sh | sh + export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH" +fi +if [ ! -x "$RAY_VENV/bin/python" ]; then + say "creating venv at $RAY_VENV (python 3.12)" + uv venv --python 3.12 "$RAY_VENV" +fi +PY="$RAY_VENV/bin/python" +PIP() { uv pip install --python "$PY" "$@"; } +say "python: $($PY --version)" + +# --- 2. Ray nightly + local-source symlink --- +# CRITICAL: the wheel's compiled protobuf must match the branch's Python source, or +# `custom_types.py` asserts "out of sync" at import. setup-dev.py symlinks THIS repo's +# python/ray over the wheel, so we install the per-commit nightly built from the +# branch's base commit (merge-base with upstream/master), NOT "latest" — latest drifts. +BASE_SHA="$(git -C "$REPO" merge-base HEAD upstream/master 2>/dev/null \ + || git -C "$REPO" merge-base HEAD origin/master 2>/dev/null \ + || echo 7dc67bed3ba2f3504325b206a70adcc470422860)" +if [ "${SKIP_RAY:-0}" != "1" ]; then + if [ -z "${RAY_WHEEL_URL:-}" ]; then + if [ "$OS" = "Linux" ]; then + PYTAG=cp312; PLAT=manylinux2014_x86_64 + elif [ "$ARCH" = "arm64" ]; then + PYTAG=cp312; PLAT=macosx_11_0_arm64 + else + PYTAG=cp312; PLAT=macosx_10_15_x86_64 + fi + RAY_WHEEL_URL="https://s3-us-west-2.amazonaws.com/ray-wheels/master/${BASE_SHA}/ray-3.0.0.dev0-${PYTAG}-${PYTAG}-${PLAT}.whl" + fi + say "installing Ray nightly (base commit ${BASE_SHA:0:12}): $RAY_WHEEL_URL" + # Wipe any prior ray install FIRST. A re-run over a setup-dev'd tree has symlinked + # subpackages (ray/workflow -> local source); pip/uv --force-reinstall dies trying + # to rmdir a symlink ("Not a directory"). Removing the dir just unlinks those + # symlinks (never touches the repo source they point to), so a clean install lands + # the commit-matched wheel — and swaps a same-version "latest" wheel too. + SITE="$("$PY" -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')" + rm -rf "$SITE/ray" "$SITE"/ray-*.dist-info "$SITE"/ray_*.dist-info 2>/dev/null || true + PIP "ray[data] @ $RAY_WHEEL_URL" + # Symlink THIS repo's python/ray over the installed wheel so the local + # arrow-rs reader source is what actually runs (mirrors the mac dev setup). + say "symlinking local python/ray via setup-dev.py" + "$PY" "$REPO/python/ray/setup-dev.py" -y +else + say "SKIP_RAY=1 — assuming Ray is installed and python/ray is symlinked" +fi + +# --- 3. Rust toolchain + maturin --- +if ! command -v cargo >/dev/null 2>&1; then + say "installing Rust via rustup (official installer)" + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +fi +export PATH="$HOME/.cargo/bin:$PATH" +say "rustc: $(rustc --version)" +PIP maturin + +# --- 4. build the native crate into the venv --- +if [ "${SKIP_CRATE:-0}" != "1" ]; then + say "building ray_data_arrow_rs (maturin develop --release) — compiles arrow/parquet, ~2-5 min" + # maturin refuses if BOTH VIRTUAL_ENV and CONDA_PREFIX are set (common when a + # base conda env is active); unset CONDA_PREFIX for this build only. + ( cd "$CRATE" && unset CONDA_PREFIX && VIRTUAL_ENV="$RAY_VENV" "$RAY_VENV/bin/maturin" develop --release ) +else + say "SKIP_CRATE=1 — assuming ray_data_arrow_rs is already built" +fi + +# --- 5. probe Python deps --- +# aiohttp: NOT pulled in by the ray[data] extra, but the runtime-env agent imports +# it; without it the agent crashes and the raylet fate-shares (`ray.init()` hangs +# indefinitely) — cost a day on the 2026-07-27 workspace run. +# awscli: gen_s3_fixtures.py uploads fixtures via `aws s3 sync`. +say "installing probe deps (psutil, numpy, pyarrow, aiohttp, awscli)" +PIP psutil numpy pyarrow aiohttp awscli + +# --- 6. verify the arrow-rs path actually engages --- +say "verifying arrow-rs read path end to end" +RAY_ADDRESS=local RAY_DATA_USE_DATASOURCE_V2=1 RAY_DATA_USE_ARROW_RS_PARQUET_READER=1 \ + RAY_task_events_report_interval_ms=0 \ + "$PY" - <<'PYEOF' +import os, tempfile +os.environ.pop("RAY_RUNTIME_ENV_HOOK", None) # Anyscale platform hook not in this venv +os.environ.pop("RAY_RUNTIME_ENV_PLUGINS", None) # platform cgroup plugin crashes the agent +import numpy as np, pyarrow as pa, pyarrow.parquet as pq +import ray_data_arrow_rs # noqa: F401 -> import must succeed (crate built) +import ray + +d = tempfile.mkdtemp() +p = os.path.join(d, "t.parquet") +pq.write_table(pa.table({"a": np.arange(1000), "b": np.arange(1000) * 1.5}), + p, write_page_index=True) +ray.init(address="local", include_dashboard=False, + ignore_reinit_error=True, log_to_driver=False) +ds = ray.data.read_parquet(p) +assert ds.count() == 1000, ds.count() +assert ds.sum("a") == sum(range(1000)) +print("OK ray", ray.__version__, " arrow-rs read path verified (count + sum match)") +ray.shutdown() +PYEOF + +say "DONE. Activate with: source $RAY_VENV/bin/activate" +cat < + + python gen_s3_fixtures.py --bucket s3://arrowrs-bench-21f6c795 + python run_matrix.py --wide-path s3://arrowrs-bench-21f6c795/wide_schema/primitives \\ + --imagenet-path s3://arrowrs-bench-21f6c795/imagenet/parquet +EOF From bfb6d01e6f232ab1a823815f3228ce6ef5719590 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 16:57:23 -0700 Subject: [PATCH 038/135] [Data] arrow-rs: page-align S3 fetch windows, fix wide-schema re-decode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The S3 windowed reader sliced a row group into fetch windows sized purely by a compressed-byte budget (window_rows_for). A RowSelection can only skip whole *pages*, never rows within a page, so when a window was narrower than a column's data page, every window overlapping that page decoded the whole page — decoding the row group once per window. This is the wide_schema pathology: a many-column/short-row row group has one data page per column, so an N-window split re-decoded all columns N times. Measured on a 5000-col / 200-row S3 fixture (concurrency=1): 260s / 5.4GB with windowing vs 42s / 4.4GB with windowing disabled (fetch_window_mb=0) — a 6x CPU-bound time regression, entirely re-decode. Fix: clamp each fetch window up to at least the coarsest projected column's largest page (max_page_rows, from the offset index the S3 path already loads). A group whose largest page spans the whole range (wide/short) collapses to a single window (parity with no windowing); a tall multi-page group still splits and keeps the bounded-working-set memory win, with page-boundary re-decode bounded to O(1) per window instead of O(pages). No offset index -> single window (windowing can't skip pages without it anyway). Pure step logic factored into effective_window_step with unit tests; max_page_rows reads the offset index. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/src/lib.rs | 86 +++++++++++++++++-- 1 file changed, 81 insertions(+), 5 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs index 72f211aa04dd..92f8b6030123 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -871,6 +871,54 @@ fn window_rows_for(rgm: &parquet::file::metadata::RowGroupMetaData, fetch_window (((fetch_window_mb as f64) * 1024.0 * 1024.0) / comp_bpr).max(1.0) as usize } +/// Largest single data page, in rows, across the projected columns of row group +/// `rg` (from the offset index). This is the floor a fetch window must not go +/// below: a `RowSelection` can only skip whole *pages*, never rows within a page, +/// so a window narrower than a column's page forces every window overlapping that +/// page to decode the whole page — re-decoding the row group once per window (the +/// wide/short-row-group pathology: few rows → one page/column → N-way re-decode). +/// +/// Returns the row group's total row count when there is no offset index (windowing +/// can't skip pages without it anyway) or the index is empty — either way the +/// caller then collapses to a single window (no split), which is correct. +fn max_page_rows(md: &parquet::file::metadata::ParquetMetaData, rg: usize) -> usize { + let num_rows = md.row_group(rg).num_rows().max(0); + let rg_oi = match md.offset_index().and_then(|oi| oi.get(rg)) { + Some(rg_oi) if !rg_oi.is_empty() => rg_oi, + _ => return num_rows as usize, + }; + let mut max_rows: i64 = 0; + for col in rg_oi { + let locs = col.page_locations(); + for (i, loc) in locs.iter().enumerate() { + let end = locs + .get(i + 1) + .map(|next| next.first_row_index) + .unwrap_or(num_rows); + max_rows = max_rows.max(end - loc.first_row_index); + } + } + if max_rows <= 0 { + num_rows as usize + } else { + max_rows as usize + } +} + +/// The row step a fetch window should advance by, given the byte-budget +/// `window_rows` (0 = no cap) and the coarsest column's `max_page_rows`. Clamping +/// the window up to at least one full page means each page is decoded by ~one +/// window instead of every overlapping window; a group whose largest page spans +/// the whole range (wide/short) collapses to `len` (a single window == parity with +/// no windowing), while a tall multi-page group still splits and keeps the +/// bounded-working-set win. Pure so it is unit-tested without a Parquet fixture. +fn effective_window_step(window_rows: usize, max_page_rows: usize, len: usize) -> usize { + if window_rows == 0 { + return len.max(1); + } + window_rows.max(max_page_rows).max(1) +} + /// Spawn a background task that fetches + decodes ONE fetch window — rows /// `[w, w+wlen)` within row group `rg` — streaming its batches into a bounded /// channel, and return the receiver. Building the stream is cheap (metadata is @@ -960,11 +1008,11 @@ async fn drive_unit( ); let window_rows = window_rows_for(rgm, fetch_window_mb); let end = start + len; - let step = if window_rows == 0 { - len.max(1) - } else { - window_rows.max(1) - }; + // Never window below the coarsest column's largest page (see max_page_rows): + // a sub-page window re-decodes that page in every window it overlaps. This + // collapses wide/short row groups (one page per column) to a single window + // — parity with no windowing — while tall multi-page groups still split. + let step = effective_window_step(window_rows, max_page_rows(meta.metadata(), rg), len); let mut w = start; while w < end { let wlen = step.min(end - w); @@ -1366,6 +1414,34 @@ mod tests { ))); } + #[test] + fn window_step_clamps_up_to_a_full_page() { + // The wide/short pathology: byte budget wants a 40-row window but the + // (single) page spans all 200 rows -> clamp up to 200 so the whole range + // is one window (no per-window re-decode of that page). + assert_eq!(effective_window_step(40, 200, 200), 200); + // step >= len => the caller emits exactly one window (parity, no split). + assert!(effective_window_step(40, 200, 200) >= 200); + } + + #[test] + fn window_step_keeps_splitting_a_tall_group() { + // Tall multi-page group: window (4096 rows) already spans several 512-row + // pages, so it is left as-is and the range still splits into windows. + assert_eq!(effective_window_step(4096, 512, 1_000_000), 4096); + // A window smaller than the page still gets clamped up to the page, so a + // page is never split across windows (bounds boundary re-decode to O(1)). + assert_eq!(effective_window_step(256, 512, 1_000_000), 512); + } + + #[test] + fn window_step_zero_means_whole_range() { + // fetch_window_mb == 0 -> window_rows == 0 -> one window over the range, + // regardless of page size. + assert_eq!(effective_window_step(0, 512, 8192), 8192); + assert_eq!(effective_window_step(0, 0, 1), 1); + } + #[test] fn unsigned_and_nonint_logical_types_are_not_comparable() { // Unsigned: a u32 max is stored as the i32 bit pattern -1, so reading From 40d88ed4e58630e89d08a00495337cb43e55c504 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 17:57:42 -0700 Subject: [PATCH 039/135] [Data] TESTING (revert before PR): read_probe deterministic per-task USS The peak_uss psutil sampler had ~1.6 GB run-to-run variance on identical configs (a no-op env knob produced a clean monotonic "trend"), which made every fine memory comparison untrustworthy. Two causes, both fixed: - 10 Hz sampling missed the short 5000-column builder-flush spike on some runs. Raise to 50 Hz. - The sampler summed every ``ray::`` process on the box, including the managed workspace Ray (:6379). Restrict to OUR raylet's descendant workers via ``_global_node`` (ray:: proctitles can't be matched by session dir). - RAY_ADDRESS=local next to :6379 made the stats re-resolution ambiguous, so Ray's deterministic per-task ``max_uss`` (read_avg_max_uss_gb) errored out every run. Pin the explicit gcs address after init so it populates. read_avg_max_uss_gb (recorded by MemoryProfiler, no sampling) is now the metric of record; the psutil peak is the backup. Also report sampled_workers to verify isolation. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../dataset/arrow_rs_probe/read_probe.py | 56 +++++++++++++++++-- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/release/nightly_tests/dataset/arrow_rs_probe/read_probe.py b/release/nightly_tests/dataset/arrow_rs_probe/read_probe.py index 87acc81039e0..eae1274cabc7 100644 --- a/release/nightly_tests/dataset/arrow_rs_probe/read_probe.py +++ b/release/nightly_tests/dataset/arrow_rs_probe/read_probe.py @@ -85,7 +85,11 @@ def parse_args() -> argparse.Namespace: p.add_argument( "--consume", choices=["iter_bundles", "count"], default="iter_bundles" ) - p.add_argument("--sample-hz", type=float, default=10.0) + # 50 Hz (20 ms): a 5000-column decode's builder-flush spike is short; at the + # old 10 Hz it was caught on some runs and missed on others, giving ~1.5 GB of + # run-to-run variance in peak_uss. The deterministic metric of record is Ray's + # own per-task max USS (``read_avg_max_uss_gb``); this sampler is the backup. + p.add_argument("--sample-hz", type=float, default=50.0) args = p.parse_args() if args.preset: args.path = args.path or PRESETS[args.preset]["path"] @@ -104,18 +108,36 @@ class WorkerMemSampler: peak of their *summed* RSS (and USS on Linux) plus total CPU consumed while sampling. """ - def __init__(self, interval_s: float): + def __init__(self, interval_s: float, root_pid: Optional[int] = None): self._interval_s = interval_s self._stop = threading.Event() self._thread: Optional[threading.Thread] = None self.peak_rss = 0 self.peak_uss = 0 # stays 0 if USS is unavailable (macOS) self._uss_ok = True + # PID of OUR node's raylet. When set, we sum only its descendant workers, + # not every ``ray::`` process on the box — otherwise the workspace's managed + # Ray (:6379) workers get summed in, polluting the peak. None => fall back to + # the cmdline heuristic (macOS / when the raylet pid can't be found). + self._root_pid = root_pid + self.matched_workers = 0 # Track CPU as (last_seen_total) per pid, summed into cpu_seconds on exit. self._cpu_last: Dict[int, float] = {} self.cpu_seconds = 0.0 def _ray_workers(self) -> List[psutil.Process]: + # Preferred: OUR raylet + its descendant workers only. A private local Ray + # instance owns exactly its read workers here, so this isolates us from the + # workspace's :6379 node cleanly (ray:: proctitles can't be matched by + # session dir — setproctitle overwrites the cmdline). + if self._root_pid is not None: + try: + root = psutil.Process(self._root_pid) + procs = [root] + root.children(recursive=True) + self.matched_workers = len(procs) + return procs + except psutil.NoSuchProcess: + return [] out = [] for proc in psutil.process_iter(["name", "cmdline"]): try: @@ -124,6 +146,7 @@ def _ray_workers(self) -> List[psutil.Process]: out.append(proc) except (psutil.NoSuchProcess, psutil.AccessDenied): continue + self.matched_workers = len(out) return out def _sample(self): @@ -211,6 +234,29 @@ def main(): ray.init(ignore_reinit_error=True) + # Pin subsequent Ray/GCS resolution to THIS instance's address. With + # RAY_ADDRESS=local next to the workspace's managed Ray (:6379), the stats + # collection re-resolves "local", finds two running instances, and errors — + # which is why read_avg_max_uss_gb (the deterministic per-task USS) has been + # empty every run. Pinning the explicit gcs address disambiguates it. + try: + gcs = ray.get_runtime_context().gcs_address + if gcs: + os.environ["RAY_ADDRESS"] = gcs + except Exception: + pass + + # Find OUR raylet's pid so the sampler sums only our node's workers. + root_pid: Optional[int] = None + try: + node = ray._private.worker._global_node # noqa: SLF001 + for name, procs in (node.all_processes or {}).items(): + if "raylet" in name.lower() and procs: + root_pid = procs[0].process.pid + break + except Exception: + pass + read_kwargs: Dict[str, Any] = {} if args.columns: read_kwargs["columns"] = args.columns @@ -221,11 +267,12 @@ def main(): print( f"reader={args.reader} path={args.path} columns={args.columns} " f"concurrency={args.concurrency} arena_max={os.environ.get('MALLOC_ARENA_MAX')} " - f"ld_preload={os.environ.get('LD_PRELOAD')}" + f"ld_preload={os.environ.get('LD_PRELOAD')} " + f"raylet_pid={root_pid} sample_hz={args.sample_hz}" ) try: - with WorkerMemSampler(1.0 / args.sample_hz) as sampler: + with WorkerMemSampler(1.0 / args.sample_hz, root_pid=root_pid) as sampler: t0 = time.perf_counter() ds = ray.data.read_parquet(args.path, **read_kwargs) if args.consume == "count": @@ -242,6 +289,7 @@ def main(): "cpu_over_wall": round(sampler.cpu_seconds / wall, 3) if wall else None, "peak_rss_gb": _gb(sampler.peak_rss), "peak_uss_gb": _gb(sampler.peak_uss) if sampler.peak_uss else None, + "sampled_workers": sampler.matched_workers, **collect_read_op_metrics(ds), } print("\n=== RESULT ===") From 2dc8c5f651be47fff1fb9383da9e5331544a64ab Mon Sep 17 00:00:00 2001 From: Aarrya Date: Mon, 3 Aug 2026 18:25:00 -0700 Subject: [PATCH 040/135] [Data] TESTING (revert before PR): wide-schema column-windowing S3 path Bounds the column dimension on wide/short row groups where row-windowing collapses to the whole group. partition_columns_by_budget splits projected column chunks into <=column_fetch_mb compressed groups read SEQUENTIALLY (each group's InMemoryRowGroup + decoder scratch freed before the next), hstacked zero-copy. Knob: RAY_DATA_ARROW_RS_COLUMN_FETCH_MB / arrow_rs_column_fetch_mb. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/src/lib.rs | 261 +++++++++++++++++- .../readers/arrow_rs_parquet_file_reader.py | 38 ++- 2 files changed, 292 insertions(+), 7 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs index 92f8b6030123..e89a2040cd2b 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -69,7 +69,7 @@ use parquet::file::metadata::RowGroupMetaData; use parquet::file::statistics::Statistics; use parquet::schema::types::ColumnDescriptor; -use arrow::array::RecordBatch; +use arrow::array::{ArrayRef, RecordBatch}; use arrow::datatypes::SchemaRef; use arrow::error::ArrowError; use arrow::ffi::FFI_ArrowSchema; @@ -296,6 +296,68 @@ fn projection_mask( } } +/// Ordered leaf-column indices for a projection (flat schema: leaf index == root +/// field index == column-chunk index). Mirrors `projection_mask`'s name matching so +/// the two always agree on which columns are read. +fn projected_leaf_indices( + parquet_schema: &parquet::schema::types::SchemaDescriptor, + columns: &Option>, +) -> Vec { + let root = parquet_schema.root_schema(); + match columns { + None => (0..root.get_fields().len()).collect(), + Some(names) => root + .get_fields() + .iter() + .enumerate() + .filter(|(_, f)| names.iter().any(|n| n == f.name())) + .map(|(i, _)| i) + .collect(), + } +} + +/// `(leaf index, compressed size)` for the projected columns of a row group, in +/// ascending leaf order — the input to `partition_columns_by_budget`. +fn projected_col_sizes(rgm: &RowGroupMetaData, leaves: &[usize]) -> Vec<(usize, u64)> { + leaves + .iter() + .map(|&i| (i, rgm.column(i).compressed_size().max(0) as u64)) + .collect() +} + +/// Partition projected columns into contiguous groups whose per-group compressed +/// size stays under `budget_bytes`, so the S3 reader can fetch+decode ONE group at +/// a time and hold only that group's compressed chunks resident — the wide-schema +/// memory fix (the async reader's default `InMemoryRowGroup` otherwise fetches every +/// projected column chunk for the row group up front). `cols` is `(leaf, size)` in +/// ascending leaf order and groups preserve that order, so hstacking the groups +/// reproduces file/schema column order. `budget_bytes == 0` (or ≤1 column) => a +/// single group (disabled). A lone oversized column still gets its own group — a +/// column can't be split below itself (that would be row-windowing, handled +/// elsewhere). +fn partition_columns_by_budget(cols: &[(usize, u64)], budget_bytes: u64) -> Vec> { + if budget_bytes == 0 || cols.len() <= 1 { + return vec![cols.iter().map(|(i, _)| *i).collect()]; + } + let mut groups: Vec> = Vec::new(); + let mut cur: Vec = Vec::new(); + let mut acc: u64 = 0; + for &(idx, sz) in cols { + // Start a new group when the current one is non-empty and adding this column + // would exceed the budget. A single column always fits (never split below 1). + if !cur.is_empty() && acc.saturating_add(sz) > budget_bytes { + groups.push(std::mem::take(&mut cur)); + acc = 0; + } + cur.push(idx); + acc = acc.saturating_add(sz); + } + if !cur.is_empty() { + groups.push(cur); + } + groups +} + /// Probe the projected output schema with an empty (zero row group) reader, so /// `schema()` is available to the FFI stream before any batch is pulled. fn probe_schema( @@ -1071,6 +1133,114 @@ async fn drive_unit( } } +/// Drive selected row groups for a WIDE projection by **column-windowing**: within +/// each row group, read the projected columns in sequential groups (each under the +/// compressed-byte budget), collect every group's batches, then hstack them +/// position-wise into full-width batches sent in row order. +/// +/// Why sequential groups: the async reader's `InMemoryRowGroup` fetches *every* +/// projected column chunk for a row group into memory before decoding and holds them +/// all resident. For a wide schema that whole-group compressed buffer is the entire +/// S3 memory regression (PyArrow releases column chunks as it decodes; we didn't). +/// Reading one column group at a time — dropping its stream before the next fetches — +/// bounds resident compressed bytes to ~`budget` instead of the whole group. Peak = +/// `budget` + the fully decoded row group, and the decoded row group is the output we +/// must produce anyway (PyArrow holds it too), so this asymptotes to PyArrow parity. +/// +/// Columns are independent, so unlike row-windowing this NEVER re-decodes a page. +/// All groups read the same rows with the same `batch_size`, so their batches align +/// 1:1 and hstack by position; ascending-leaf group order reproduces schema order. +#[allow(clippy::too_many_arguments)] +async fn drive_colwindowed( + store: Arc, + path: ObjPath, + meta: ArrowReaderMetadata, + out_schema: SchemaRef, + leaves: Vec, + selected: Vec, + budget_bytes: u64, + batch_clamp: usize, + decode_budget: u64, + tx: mpsc::Sender>, +) { + // Send an error downstream and stop (mirrors spawn_window's error contract). + macro_rules! send_err { + ($e:expr) => {{ + let _ = tx.send(Err(ArrowError::ExternalError(Box::new($e)))).await; + return; + }}; + } + for rg in selected { + // --- sync prelude: partition columns + build masks (borrows `meta`, so it + // must finish before the first `.await`) --- + let (batch_rows, masks) = { + let rgm = meta.metadata().row_group(rg); + let batch_rows = byte_budget_rows( + rgm.total_byte_size(), + rgm.num_rows(), + batch_clamp, + decode_budget, + ); + let groups = + partition_columns_by_budget(&projected_col_sizes(rgm, &leaves), budget_bytes); + let schema_descr = meta.metadata().file_metadata().schema_descr(); + let masks: Vec = groups + .into_iter() + .map(|g| ProjectionMask::roots(schema_descr, g)) + .collect(); + (batch_rows, masks) + }; + + // --- one sequential decode pass per column group --- + let mut group_batches: Vec> = Vec::with_capacity(masks.len()); + for mask_g in masks { + let reader = ParquetObjectReader::new(store.clone(), path.clone()); + let built = ParquetRecordBatchStreamBuilder::new_with_metadata(reader, meta.clone()) + .with_row_groups(vec![rg]) + .with_batch_size(batch_rows) + .with_projection(mask_g) + .build(); + let mut stream = match built { + Ok(s) => s, + Err(e) => send_err!(e), + }; + let mut batches = Vec::new(); + while let Some(item) = stream.next().await { + match item { + Ok(b) => batches.push(b), + Err(e) => send_err!(e), + } + } + group_batches.push(batches); + // `stream` (and its InMemoryRowGroup) dropped here -> this group's + // compressed bytes are freed before the next group's fetch starts. + } + + // --- hstack the row-aligned batches into full-width batches --- + let nbatches = group_batches.first().map(|g| g.len()).unwrap_or(0); + if group_batches.iter().any(|g| g.len() != nbatches) { + send_err!(ArrowError::ComputeError(format!( + "column-window batch-count mismatch in row group {rg}: {:?}", + group_batches.iter().map(|g| g.len()).collect::>() + ))); + } + for i in 0..nbatches { + let mut cols: Vec = Vec::with_capacity(out_schema.fields().len()); + for g in &group_batches { + cols.extend(g[i].columns().iter().cloned()); + } + match RecordBatch::try_new(out_schema.clone(), cols) { + Ok(b) => { + if tx.send(Ok(b)).await.is_err() { + return; // consumer dropped + } + } + Err(e) => send_err!(e), + } + } + } +} + /// Build an S3 `ObjectStore` from the config recovered from the pyarrow /// `S3FileSystem` on the Python side (`fs.__reduce__()[1][0]`) so credentialed / /// custom-endpoint (MinIO, moto) / anonymous buckets all connect identically to @@ -1123,7 +1293,7 @@ fn build_s3_store( virtual_hosted_style=false, row_groups=None, columns=None, batch_size=131072, decode_budget_bytes=2*1024*1024, fetch_window_mb=16, k=1, split_threshold_bytes=134217728, - prefetch_windows=2, predicate_json=None))] + prefetch_windows=2, predicate_json=None, column_fetch_mb=256))] #[allow(clippy::too_many_arguments)] fn read_row_groups_s3( py: Python<'_>, @@ -1150,6 +1320,9 @@ fn read_row_groups_s3( prefetch_windows: usize, // See `read_row_groups`: statistics row-group pruning only. predicate_json: Option, + // Compressed-byte budget per column group for the wide-schema column-windowing + // path (0 disables it). See `drive_colwindowed`. + column_fetch_mb: u64, ) -> PyResult { let store = build_s3_store( &bucket, @@ -1212,6 +1385,45 @@ fn read_row_groups_s3( && meta.metadata().row_group(selected[0]).total_byte_size() as u64 >= split_threshold_bytes && meta.metadata().offset_index().is_some(); + // Column-windowing (wide-schema S3 memory fix): if any selected group's projected + // columns exceed the compressed budget, read them in sequential column groups so + // only one group's compressed chunks are resident at a time. Only for the + // non-split path (K-split handles the lone-huge-*tall* group); narrow reads + // partition to a single group and fall through to the streaming path unchanged. + let leaves = + projected_leaf_indices(meta.metadata().file_metadata().schema_descr(), &columns); + let colwindow_budget = column_fetch_mb.saturating_mul(1024 * 1024); + let colwindow = !split + && colwindow_budget > 0 + && selected.iter().any(|&rg| { + partition_columns_by_budget( + &projected_col_sizes(meta.metadata().row_group(rg), &leaves), + colwindow_budget, + ) + .len() + > 1 + }); + if colwindow { + let (tx, rx) = mpsc::channel::>(S3_CHANNEL_DEPTH); + rt.spawn(drive_colwindowed( + store.clone(), + obj_path.clone(), + meta.clone(), + schema.clone(), + leaves, + selected, + colwindow_budget, + batch_size, + decode_budget_bytes, + tx, + )); + return Ok(into_py_stream(Box::new(S3ChannelReader { + schema, + receivers: vec![rx], + cur: 0, + }))); + } + // Build the per-unit sub-range lists (each becomes one task + one channel, // drained in order). let units: Vec> = if split { @@ -1434,6 +1646,51 @@ mod tests { assert_eq!(effective_window_step(256, 512, 1_000_000), 512); } + #[test] + fn column_partition_splits_wide_group_under_budget() { + // 5 columns of 100 bytes each, budget 250 -> groups of [0,1],[2,3],[4]. + let cols: Vec<(usize, u64)> = (0..5).map(|i| (i, 100)).collect(); + assert_eq!( + partition_columns_by_budget(&cols, 250), + vec![vec![0, 1], vec![2, 3], vec![4]] + ); + // Ascending leaf order is preserved within and across groups (so hstack + // reproduces schema order). + let flat: Vec = partition_columns_by_budget(&cols, 250) + .into_iter() + .flatten() + .collect(); + assert_eq!(flat, vec![0, 1, 2, 3, 4]); + } + + #[test] + fn column_partition_disabled_or_narrow_is_one_group() { + let cols: Vec<(usize, u64)> = (0..5).map(|i| (i, 100)).collect(); + // budget 0 disables -> single group. + assert_eq!( + partition_columns_by_budget(&cols, 0), + vec![vec![0, 1, 2, 3, 4]] + ); + // budget larger than the total -> single group (narrow/small reads). + assert_eq!( + partition_columns_by_budget(&cols, 10_000), + vec![vec![0, 1, 2, 3, 4]] + ); + // <=1 column -> single group regardless of budget. + assert_eq!(partition_columns_by_budget(&[(7, 999)], 1), vec![vec![7]]); + } + + #[test] + fn column_partition_never_splits_below_one_column() { + // A single oversized column exceeds the budget but still gets its own group + // (can't split a column below itself). Neighbours don't merge into it. + let cols = vec![(0, 10), (1, 500), (2, 10)]; + assert_eq!( + partition_columns_by_budget(&cols, 100), + vec![vec![0], vec![1], vec![2]] + ); + } + #[test] fn window_step_zero_means_whole_range() { // fetch_window_mb == 0 -> window_rows == 0 -> one window over the range, diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index a5447332d76e..451a98a6e094 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -20,11 +20,15 @@ - ``read_row_groups(path, row_groups, columns, batch_size, ...)`` — local files. - ``read_row_groups_s3(bucket, key, region, anonymous, ...creds..., row_groups, columns, batch_size, decode_budget_bytes, fetch_window_mb, k, - split_threshold_bytes, prefetch_windows)`` — S3 via the Rust ``object_store`` - crate, using a **windowed** fetch (only ``fetch_window_mb`` of compressed bytes - in flight per stream) so S3 peak RSS is a knob, not a property of the row-group - size. ``prefetch_windows`` pipelines consecutive windows (issue window N+1's GET - while window N decodes) to hide S3 latency without staging the whole row group. + split_threshold_bytes, prefetch_windows, predicate_json, column_fetch_mb)`` — S3 + via the Rust ``object_store`` crate, using a **windowed** fetch (only + ``fetch_window_mb`` of compressed bytes in flight per stream) so S3 peak RSS is a + knob, not a property of the row-group size. ``prefetch_windows`` pipelines + consecutive windows (issue window N+1's GET while window N decodes) to hide S3 + latency without staging the whole row group. ``column_fetch_mb`` is the row axis's + dual for **wide** schemas: it reads a wide row group's columns in sequential groups + so only ``≈column_fetch_mb`` of compressed column chunks are resident at once, + instead of arrow-rs's default whole-row-group column fetch. All of the crate's performance knobs (decode budget, K-split, fetch window, prefetch depth) are settable per read through ``dataset_kwargs`` under an @@ -244,6 +248,25 @@ # memory at the cost of exposing S3 latency between windows. _ARROW_RS_PREFETCH_WINDOWS = env_integer("RAY_DATA_ARROW_RS_PREFETCH_WINDOWS", 2) +# Knob ``arrow_rs_column_fetch_mb`` — crate arg ``column_fetch_mb``. +# S3 column-fetch budget (MiB of *compressed* bytes per column group). This is the +# memory knob for WIDE schemas. arrow-rs's async reader fetches every projected +# column chunk of a row group into memory up front (``InMemoryRowGroup``) and holds +# them all while decoding — so a 5000-column group's whole compressed footprint is +# resident, which PyArrow avoids (it releases each column chunk as it decodes). When +# a single row group's projected columns exceed this budget, the native reader reads +# them in sequential column groups (each ≲ this many compressed bytes), holding only +# one group's compressed chunks at a time, so peak ≈ ``column_fetch_mb`` + the fully +# decoded row group (the output, which PyArrow holds too) — asymptotes to PyArrow +# parity as the budget shrinks. 0 disables (fetch the whole row group at once, the +# pre-fix behavior). Only affects the S3 path and only engages for wide groups; +# narrow/small reads partition to a single group and are untouched. Measured on the +# Linux/S3 run (Agents.md §7.1); the fetch_window_mb knob is its row-axis dual. +# Tuning: lower (64–128) to cap per-task RSS on wide-schema reads at the cost of more, +# smaller GETs (column groups fetch sequentially, so throughput can dip); raise to +# fetch fewer, larger column groups when memory is plentiful. +_ARROW_RS_COLUMN_FETCH_MB = env_integer("RAY_DATA_ARROW_RS_COLUMN_FETCH_MB", 256) + # Parquet-format kwargs (``pds.ParquetFileFormat``) that tune PyArrow's I/O # strategy only — they cannot change decoded bytes, so the native path (which # has its own I/O strategy: byte-budgeted streaming + bounded fetch window) may @@ -300,6 +323,7 @@ class _ArrowRsTuning(NamedTuple): split_threshold_bytes: Optional[int] fetch_window_mb: int prefetch_windows: int + column_fetch_mb: int # There is deliberately NO per-type support gate: every type Parquet can store @@ -1121,6 +1145,9 @@ def resolve(key: str, default: int, minimum: int) -> int: prefetch_windows=resolve( "arrow_rs_prefetch_windows", _ARROW_RS_PREFETCH_WINDOWS, 1 ), + column_fetch_mb=resolve( + "arrow_rs_column_fetch_mb", _ARROW_RS_COLUMN_FETCH_MB, 0 + ), ) @cached_property @@ -1590,6 +1617,7 @@ def _iter_native_tables( split_threshold_bytes=split_threshold, prefetch_windows=tuning.prefetch_windows, predicate_json=predicate_json, + column_fetch_mb=tuning.column_fetch_mb, ) else: reader = ray_data_arrow_rs.read_row_groups( From 361be3ed16a8ad2831d74096e36ba9f323dbb52a Mon Sep 17 00:00:00 2001 From: Aarrya Date: Tue, 4 Aug 2026 11:50:58 -0700 Subject: [PATCH 041/135] [Data] arrow-rs: budget-gated concurrent prefetch for the column-window S3 path Sequential column groups left the decoder idle during every S3 fetch (and the network idle during every decode). Now an admission loop acquires KiB-denominated semaphore permits per group (sized exactly from footer chunk metadata) and spawns its ranged GET; fetches run concurrently up to a compressed-byte budget while decode stays strictly one-group-at-a-time (the wide-schema scratch bound). Dropping a decoded group's bytes releases its permits, waking the next fetch: constant memory pressure, concurrency self-adjusts to the fetch:decode ratio. Knob: arrow_rs_column_prefetch_budget_mb / RAY_DATA_ARROW_RS_COLUMN_PREFETCH_BUDGET_MB (default 64; 0 = old sequential behavior). Also: column_fetch_mb default 256->16 (measured knee: 4.30 GB vs PyArrow 6.78 GB fanned-out, byte-identical output) and adds both column knobs to ARROW_RS_TUNING_KWARGS (dataset_kwargs path previously raised "Unknown arrow-rs tuning kwargs" for them). Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/Cargo.toml | 6 +- .../native/ray_data_arrow_rs/src/lib.rs | 266 ++++++++++++++++-- .../readers/arrow_rs_parquet_file_reader.py | 42 ++- .../readers/parquet_file_reader.py | 2 + 4 files changed, 284 insertions(+), 32 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml index e26a5dc67e0e..2e66faabccc5 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.toml @@ -32,8 +32,12 @@ object_store = { version = "0.13", features = ["aws"] } # cargo test --no-default-features # maturin builds with default features on, so the shipped extension is unchanged. pyo3 = { version = "0.22", features = ["abi3-py39"] } -tokio = { version = "1", features = ["rt-multi-thread", "macros"] } +tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync"] } futures = "0.3" +# Already in the tree via parquet/object_store; direct dep only so the +# column-prefetch path can hold/slice fetched buffers (`Bytes` is refcounted, +# so slices share the underlying allocation — no copies). +bytes = "1" # Predicate IR is passed from Python as a small JSON string (built from the Ray # `Expr` AST) and parsed here into a `Pred` tree for row-group stats pruning. # JSON keeps the boundary language-agnostic and lets the pruning logic be diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs index e89a2040cd2b..cdb1547d1793 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -79,21 +79,26 @@ use parquet::arrow::arrow_reader::{ ArrowReaderMetadata, ArrowReaderOptions, ParquetRecordBatchReader, ParquetRecordBatchReaderBuilder, RowSelection, RowSelector, }; -use parquet::arrow::async_reader::{ParquetObjectReader, ParquetRecordBatchStreamBuilder}; +use parquet::arrow::async_reader::{ + AsyncFileReader, ParquetObjectReader, ParquetRecordBatchStreamBuilder, +}; use parquet::arrow::ProjectionMask; use parquet::errors::ParquetError; -use parquet::file::metadata::PageIndexPolicy; +use parquet::file::metadata::{PageIndexPolicy, ParquetMetaData}; use pyo3::exceptions::PyRuntimeError; use pyo3::prelude::*; use pyo3::types::PyCapsule; use std::ffi::CString; +use bytes::Bytes; +use futures::future::BoxFuture; use futures::StreamExt; use object_store::aws::AmazonS3Builder; use object_store::path::Path as ObjPath; use object_store::ObjectStore; +use std::ops::Range; use std::sync::{Arc, OnceLock}; -use tokio::sync::mpsc; +use tokio::sync::{mpsc, Semaphore}; // NOTE on allocators: earlier prototypes carried optional mimalloc/jemalloc // global-allocator features to chase a suspected allocator-retention gap vs @@ -1151,6 +1156,84 @@ async fn drive_unit( /// All groups read the same rows with the same `batch_size`, so their batches align /// 1:1 and hstack by position; ascending-leaf group order reproduces schema order. #[allow(clippy::too_many_arguments)] +/// One column group's compressed bytes, prefetched from S3, plus the +/// byte-budget permits it holds. Dropping this (after the group is decoded) +/// frees the bytes AND releases the permits — which is what wakes the +/// admission loop to launch the next group's fetch. That drop-to-wake handoff +/// is the whole backpressure mechanism: memory pressure stays ~constant at +/// `prefetch_budget` compressed bytes without any explicit signalling code. +struct PrefetchedGroup { + mask: ProjectionMask, + ranges: Vec>, + data: Vec, + _permit: tokio::sync::OwnedSemaphorePermit, +} + +/// Find `want` inside one of the prefetched `ranges` and return the matching +/// slice of its `Bytes` (refcounted view, no copy). `None` if no prefetched +/// range fully contains it. Pure so it unit-tests without an object store. +fn slice_prefetched(ranges: &[Range], data: &[Bytes], want: &Range) -> Option { + for (r, b) in ranges.iter().zip(data) { + if want.start >= r.start && want.end <= r.end { + let s = (want.start - r.start) as usize; + let e = (want.end - r.start) as usize; + return Some(b.slice(s..e)); + } + } + None +} + +/// `AsyncFileReader` that serves a column group's page reads from its +/// prefetched buffers instead of S3. The decode stream built on top of this +/// never touches the network — the fetch already happened, budget-gated, in +/// the admission loop. Requests are always sub-ranges of whole column chunks +/// (page reads within a chunk), so containment lookup suffices. +struct PrefetchedReader { + ranges: Vec>, + data: Vec, + meta: Arc, +} + +impl AsyncFileReader for PrefetchedReader { + fn get_bytes(&mut self, range: Range) -> BoxFuture<'_, parquet::errors::Result> { + let res = slice_prefetched(&self.ranges, &self.data, &range).ok_or_else(|| { + ParquetError::General(format!( + "column-prefetch: byte range {range:?} was not prefetched" + )) + }); + Box::pin(futures::future::ready(res)) + } + + fn get_metadata<'a>( + &'a mut self, + _options: Option<&'a ArrowReaderOptions>, + ) -> BoxFuture<'a, parquet::errors::Result>> { + // Never hit in practice (streams are built with `new_with_metadata`), + // but the trait requires it. + let meta = self.meta.clone(); + Box::pin(futures::future::ready(Ok(meta))) + } +} + +/// Byte ranges + compressed KiB of one column group's chunks, straight from +/// the footer metadata — the "conservative estimate from parquet metadata" +/// that sizes each fetch exactly (chunk offsets/lengths are exact, not +/// estimates, so the budget accounting is exact too). +fn group_fetch_plan( + rgm: &parquet::file::metadata::RowGroupMetaData, + group: &[usize], +) -> (Vec>, u64) { + let mut ranges = Vec::with_capacity(group.len()); + let mut bytes = 0u64; + for &leaf in group { + let cc = rgm.column(leaf); + let (start, len) = cc.byte_range(); + ranges.push(start..start + len); + bytes += len; + } + (ranges, bytes.div_ceil(1024)) +} + async fn drive_colwindowed( store: Arc, path: ObjPath, @@ -1161,6 +1244,7 @@ async fn drive_colwindowed( budget_bytes: u64, batch_clamp: usize, decode_budget: u64, + prefetch_budget_mb: u64, tx: mpsc::Sender>, ) { // Send an error downstream and stop (mirrors spawn_window's error contract). @@ -1170,10 +1254,22 @@ async fn drive_colwindowed( return; }}; } - for rg in selected { - // --- sync prelude: partition columns + build masks (borrows `meta`, so it - // must finish before the first `.await`) --- - let (batch_rows, masks) = { + + // --- sync prelude: plan EVERY row group's column partition + fetch ranges + // up front (borrows `meta`, so it must finish before the first `.await`). + // Planning globally (not per row group) lets the prefetcher run ahead + // across row-group boundaries too. --- + struct RgPlan { + rg: usize, + batch_rows: usize, + n_groups: usize, + } + let mut rg_plans: Vec = Vec::with_capacity(selected.len()); + // (mask, chunk byte ranges, compressed KiB) per column group, in decode order. + let mut fetch_plans: Vec<(ProjectionMask, Vec>, u64)> = Vec::new(); + { + let schema_descr = meta.metadata().file_metadata().schema_descr(); + for &rg in &selected { let rgm = meta.metadata().row_group(rg); let batch_rows = byte_budget_rows( rgm.total_byte_size(), @@ -1183,22 +1279,94 @@ async fn drive_colwindowed( ); let groups = partition_columns_by_budget(&projected_col_sizes(rgm, &leaves), budget_bytes); - let schema_descr = meta.metadata().file_metadata().schema_descr(); - let masks: Vec = groups - .into_iter() - .map(|g| ProjectionMask::roots(schema_descr, g)) - .collect(); - (batch_rows, masks) - }; + rg_plans.push(RgPlan { + rg, + batch_rows, + n_groups: groups.len(), + }); + for g in groups { + let (ranges, kib) = group_fetch_plan(rgm, &g); + fetch_plans.push((ProjectionMask::roots(schema_descr, g), ranges, kib)); + } + } + } - // --- one sequential decode pass per column group --- - let mut group_batches: Vec> = Vec::with_capacity(masks.len()); - for mask_g in masks { - let reader = ParquetObjectReader::new(store.clone(), path.clone()); + // --- admission loop: budget-gated concurrent prefetch --- + // A semaphore holds `prefetch_budget` in KiB-denominated permits. For each + // column group IN ORDER: acquire permits equal to its compressed size + // (clamped to the whole budget so an oversized group can still run, alone), + // then spawn its ranged GET. Fetches whose permits fit run CONCURRENTLY — + // that's what overlaps S3 latency with decode — while acquire() blocks the + // loop the moment the budget is spent. The decoder dropping a finished + // group releases its permits and un-blocks the loop: constant memory + // pressure with zero idle gaps, no rate estimation anywhere. + // `prefetch_budget_mb == 0` degrades to one-group-at-a-time (the old + // strictly-sequential behavior) because every acquire is for the full + // 1-permit budget. + let budget_kib = prefetch_budget_mb.saturating_mul(1024).max(1); + let budget_kib = budget_kib.min(u32::MAX as u64 / 2); + let sem = Arc::new(Semaphore::new(budget_kib as usize)); + // Handles are tiny; the byte budget is what actually bounds prefetch. The + // channel only needs to keep the admission loop from racing unboundedly + // far ahead in *task count* when groups are small. + let (htx, mut hrx) = + mpsc::channel::>>(64); + { + let store = store.clone(); + let path = path.clone(); + let plans = std::mem::take(&mut fetch_plans); + tokio::spawn(async move { + for (mask, ranges, kib) in plans { + let want = kib.clamp(1, budget_kib) as u32; + let permit = match sem.clone().acquire_many_owned(want).await { + Ok(p) => p, + Err(_) => return, // semaphore closed = consumer gone + }; + let store = store.clone(); + let path = path.clone(); + let handle = tokio::spawn(async move { + match store.get_ranges(&path, &ranges).await { + Ok(data) => Ok(PrefetchedGroup { + mask, + ranges, + data, + _permit: permit, + }), + Err(e) => Err(ArrowError::ExternalError(Box::new(e))), + } + }); + if htx.send(handle).await.is_err() { + return; // decoder dropped (error path) — stop admitting + } + } + }); + } + + // --- decoder: strictly one column group at a time (bounds decode scratch; + // concurrency lives ONLY on the fetch side above) --- + for plan in rg_plans { + let mut group_batches: Vec> = Vec::with_capacity(plan.n_groups); + for _ in 0..plan.n_groups { + let handle = match hrx.recv().await { + Some(h) => h, + None => send_err!(ParquetError::General( + "column-prefetch: admission loop ended early".to_string() + )), + }; + let group = match handle.await { + Ok(Ok(g)) => g, + Ok(Err(e)) => send_err!(e), + Err(e) => send_err!(e), // task panicked/cancelled + }; + let reader = PrefetchedReader { + ranges: group.ranges, + data: group.data, + meta: Arc::clone(meta.metadata()), + }; let built = ParquetRecordBatchStreamBuilder::new_with_metadata(reader, meta.clone()) - .with_row_groups(vec![rg]) - .with_batch_size(batch_rows) - .with_projection(mask_g) + .with_row_groups(vec![plan.rg]) + .with_batch_size(plan.batch_rows) + .with_projection(group.mask) .build(); let mut stream = match built { Ok(s) => s, @@ -1212,15 +1380,19 @@ async fn drive_colwindowed( } } group_batches.push(batches); - // `stream` (and its InMemoryRowGroup) dropped here -> this group's - // compressed bytes are freed before the next group's fetch starts. + // `stream` (owning the PrefetchedReader) and `group._permit` drop + // here -> this group's compressed bytes are freed and its budget + // permits released -> the admission loop's pending acquire wakes + // and the next fetch launches. Decoded batches (the output) are + // retained for the hstack below, same as before. } // --- hstack the row-aligned batches into full-width batches --- let nbatches = group_batches.first().map(|g| g.len()).unwrap_or(0); if group_batches.iter().any(|g| g.len() != nbatches) { send_err!(ArrowError::ComputeError(format!( - "column-window batch-count mismatch in row group {rg}: {:?}", + "column-window batch-count mismatch in row group {}: {:?}", + plan.rg, group_batches.iter().map(|g| g.len()).collect::>() ))); } @@ -1293,7 +1465,8 @@ fn build_s3_store( virtual_hosted_style=false, row_groups=None, columns=None, batch_size=131072, decode_budget_bytes=2*1024*1024, fetch_window_mb=16, k=1, split_threshold_bytes=134217728, - prefetch_windows=2, predicate_json=None, column_fetch_mb=256))] + prefetch_windows=2, predicate_json=None, column_fetch_mb=256, + column_prefetch_budget_mb=64))] #[allow(clippy::too_many_arguments)] fn read_row_groups_s3( py: Python<'_>, @@ -1323,6 +1496,11 @@ fn read_row_groups_s3( // Compressed-byte budget per column group for the wide-schema column-windowing // path (0 disables it). See `drive_colwindowed`. column_fetch_mb: u64, + // Compressed bytes the column-window prefetcher may hold in flight/buffered + // ahead of the (single) decoder. Bounds memory by construction while letting + // enough GETs run concurrently to keep the decoder fed regardless of the + // fetch:decode speed ratio. 0 = strictly sequential (no overlap). + column_prefetch_budget_mb: u64, ) -> PyResult { let store = build_s3_store( &bucket, @@ -1415,6 +1593,7 @@ fn read_row_groups_s3( colwindow_budget, batch_size, decode_budget_bytes, + column_prefetch_budget_mb, tx, )); return Ok(into_py_stream(Box::new(S3ChannelReader { @@ -1691,6 +1870,43 @@ mod tests { ); } + #[test] + fn slice_prefetched_serves_contained_subranges() { + // Two prefetched chunk ranges; page reads are sub-ranges of a chunk. + let ranges = vec![100u64..200, 300u64..350]; + let data = vec![ + Bytes::from((0..100u8).collect::>()), + Bytes::from((0..50u8).collect::>()), + ]; + // Exact chunk. + assert_eq!( + slice_prefetched(&ranges, &data, &(100..200)).unwrap(), + data[0] + ); + // Interior page of the first chunk: bytes at offsets 10..15 within it. + assert_eq!( + slice_prefetched(&ranges, &data, &(110..115)).unwrap().as_ref(), + &[10, 11, 12, 13, 14] + ); + // Sub-range of the second chunk. + assert_eq!( + slice_prefetched(&ranges, &data, &(340..350)).unwrap().as_ref(), + &(40..50u8).collect::>()[..] + ); + } + + #[test] + fn slice_prefetched_rejects_uncached_or_straddling_ranges() { + let ranges = vec![100u64..200, 300u64..350]; + let data = vec![Bytes::from(vec![0u8; 100]), Bytes::from(vec![0u8; 50])]; + // Not prefetched at all. + assert!(slice_prefetched(&ranges, &data, &(0..10)).is_none()); + // Straddles the gap between the two chunks -> contained in neither. + assert!(slice_prefetched(&ranges, &data, &(150..320)).is_none()); + // Runs past the end of a chunk. + assert!(slice_prefetched(&ranges, &data, &(190..201)).is_none()); + } + #[test] fn window_step_zero_means_whole_range() { // fetch_window_mb == 0 -> window_rows == 0 -> one window over the range, diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index 451a98a6e094..5d1191d39090 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -20,7 +20,8 @@ - ``read_row_groups(path, row_groups, columns, batch_size, ...)`` — local files. - ``read_row_groups_s3(bucket, key, region, anonymous, ...creds..., row_groups, columns, batch_size, decode_budget_bytes, fetch_window_mb, k, - split_threshold_bytes, prefetch_windows, predicate_json, column_fetch_mb)`` — S3 + split_threshold_bytes, prefetch_windows, predicate_json, column_fetch_mb, + column_prefetch_budget_mb)`` — S3 via the Rust ``object_store`` crate, using a **windowed** fetch (only ``fetch_window_mb`` of compressed bytes in flight per stream) so S3 peak RSS is a knob, not a property of the row-group size. ``prefetch_windows`` pipelines @@ -261,11 +262,33 @@ # parity as the budget shrinks. 0 disables (fetch the whole row group at once, the # pre-fix behavior). Only affects the S3 path and only engages for wide groups; # narrow/small reads partition to a single group and are untouched. Measured on the -# Linux/S3 run (Agents.md §7.1); the fetch_window_mb knob is its row-axis dual. -# Tuning: lower (64–128) to cap per-task RSS on wide-schema reads at the cost of more, -# smaller GETs (column groups fetch sequentially, so throughput can dip); raise to -# fetch fewer, larger column groups when memory is plentiful. -_ARROW_RS_COLUMN_FETCH_MB = env_integer("RAY_DATA_ARROW_RS_COLUMN_FETCH_MB", 256) +# Linux/S3 run (Agents.md §7.1): on the 5000-column fixture, cf=16 cut per-task USS +# below PyArrow -- fanned out over 4 files arrow_rs peaked at 4.30 GB vs PyArrow's +# 6.78 GB (~37% less) and finished faster; the sweep was monotone in the budget +# (256->3.16, 64->2.30, 16->1.85, 4->1.76 at concurrency=1, byte-identical output), +# so 16 is the knee -- minimum RSS at wall-time parity. fetch_window_mb is its +# row-axis dual. Tuning: the default is already low; RAISE it (64-256) if a +# high-latency S3 layout shows a wall regression from the many small sequential GETs, +# or set 0 to disable (fetch the whole row group at once -- the pre-fix behavior). +_ARROW_RS_COLUMN_FETCH_MB = env_integer("RAY_DATA_ARROW_RS_COLUMN_FETCH_MB", 16) + +# Knob ``arrow_rs_column_prefetch_budget_mb`` — crate arg ``column_prefetch_budget_mb``. +# Compressed bytes the column-windowing path may prefetch AHEAD of its (single) +# decoder. Column groups are fetched concurrently, gated by a byte-denominated +# semaphore: each in-order fetch acquires permits equal to its compressed size and +# releases them when the decoder finishes (drops) that group — so fetch concurrency +# self-adjusts to the fetch:decode speed ratio (a slow network gets budget/group_size +# parallel GETs; a slow decoder backpressures fetching to a halt) and peak prefetch +# memory is the budget by construction, never an estimate. Decode itself stays +# one-group-at-a-time (that bound is the wide-schema memory fix; see +# ``column_fetch_mb``). Adds at most ``budget`` MB of compressed bytes to the +# working set (64 MB default — noise next to the decoded output) in exchange for +# overlapping S3 latency with decode. 0 = strictly sequential fetch->decode->fetch +# (the pre-prefetch behavior). Tuning: raise if ``cpu_over_wall`` on a wide S3 read +# stays well under 1 (decoder starving); lower/zero only to chase a memory ceiling. +_ARROW_RS_COLUMN_PREFETCH_BUDGET_MB = env_integer( + "RAY_DATA_ARROW_RS_COLUMN_PREFETCH_BUDGET_MB", 64 +) # Parquet-format kwargs (``pds.ParquetFileFormat``) that tune PyArrow's I/O # strategy only — they cannot change decoded bytes, so the native path (which @@ -324,6 +347,7 @@ class _ArrowRsTuning(NamedTuple): fetch_window_mb: int prefetch_windows: int column_fetch_mb: int + column_prefetch_budget_mb: int # There is deliberately NO per-type support gate: every type Parquet can store @@ -1148,6 +1172,11 @@ def resolve(key: str, default: int, minimum: int) -> int: column_fetch_mb=resolve( "arrow_rs_column_fetch_mb", _ARROW_RS_COLUMN_FETCH_MB, 0 ), + column_prefetch_budget_mb=resolve( + "arrow_rs_column_prefetch_budget_mb", + _ARROW_RS_COLUMN_PREFETCH_BUDGET_MB, + 0, + ), ) @cached_property @@ -1618,6 +1647,7 @@ def _iter_native_tables( prefetch_windows=tuning.prefetch_windows, predicate_json=predicate_json, column_fetch_mb=tuning.column_fetch_mb, + column_prefetch_budget_mb=tuning.column_prefetch_budget_mb, ) else: reader = ray_data_arrow_rs.read_row_groups( diff --git a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py index 06d1d83ca60c..4c0ea3e79aa6 100644 --- a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py @@ -54,6 +54,8 @@ "arrow_rs_split_threshold_bytes", "arrow_rs_fetch_window_mb", "arrow_rs_prefetch_windows", + "arrow_rs_column_fetch_mb", + "arrow_rs_column_prefetch_budget_mb", } ) _ARROW_RS_KWARG_PREFIX = "arrow_rs_" From 5a9e48e59ccfdd10d4cd0ddaff261d6ac7a82252 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Tue, 4 Aug 2026 11:50:58 -0700 Subject: [PATCH 042/135] [Data] TESTING (revert before PR): setup.sh upstream remote, env.sh, dep verify - ensure upstream remote + fetch before the wheel merge-base pick - generate arrow_rs_probe/env.sh (venv+cargo activation, RAY_* exports, memory guard, AWS_DEFAULT_REGION=us-west-2, fixture paths) + idempotent ~/.bashrc hook - verify aiohttp/psutil/numpy/pyarrow import loudly (missing aiohttp hangs ray.init) Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../dataset/arrow_rs_probe/setup.sh | 72 ++++++++++++++----- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/release/nightly_tests/dataset/arrow_rs_probe/setup.sh b/release/nightly_tests/dataset/arrow_rs_probe/setup.sh index ad595ff7ff5f..19b6c33c8d76 100755 --- a/release/nightly_tests/dataset/arrow_rs_probe/setup.sh +++ b/release/nightly_tests/dataset/arrow_rs_probe/setup.sh @@ -41,6 +41,16 @@ say() { printf '\n\033[1;36m==> %s\033[0m\n' "$*"; } say "repo=$REPO venv=$RAY_VENV os=$OS/$ARCH" +# --- -1. git remotes: ensure `upstream` exists + is fetched. The wheel pick below +# uses merge-base with upstream/master; on a fresh clone of the fork the remote +# is missing and the script silently falls back to a hardcoded SHA. --- +if ! git -C "$REPO" remote get-url upstream >/dev/null 2>&1; then + say "adding upstream remote (ray-project/ray)" + git -C "$REPO" remote add upstream https://github.com/ray-project/ray.git +fi +say "fetching upstream master (for wheel merge-base)" +git -C "$REPO" fetch --quiet upstream master || say "WARN: upstream fetch failed; using fallback SHA" + # --- 0. system build deps (Linux only; the crate links libpython + needs a C toolchain) --- if [ "$OS" = "Linux" ] && [ "${SKIP_APT:-0}" != "1" ] && command -v apt-get >/dev/null 2>&1; then say "apt: build-essential + python3-dev + curl (sudo)" @@ -124,6 +134,10 @@ fi # awscli: gen_s3_fixtures.py uploads fixtures via `aws s3 sync`. say "installing probe deps (psutil, numpy, pyarrow, aiohttp, awscli)" PIP psutil numpy pyarrow aiohttp awscli +# aiohttp failure mode is silent (runtime-env agent crashes -> ray.init hangs +# forever), so verify the import loudly here instead of debugging a hang later. +"$PY" -c "import aiohttp, psutil, numpy, pyarrow" \ + || { say "FATAL: probe dep import failed (aiohttp/psutil/numpy/pyarrow)"; exit 1; } # --- 6. verify the arrow-rs path actually engages --- say "verifying arrow-rs read path end to end" @@ -150,27 +164,51 @@ print("OK ray", ray.__version__, " arrow-rs read path verified (count + sum mat ray.shutdown() PYEOF -say "DONE. Activate with: source $RAY_VENV/bin/activate" -cat < "$SCRIPT_DIR/env.sh" </dev/null; then + echo "[ -f \"$SCRIPT_DIR/env.sh\" ] && source \"$SCRIPT_DIR/env.sh\"" >> "$HOME/.bashrc" + say "added env.sh source line to ~/.bashrc" +fi -Next, from $SCRIPT_DIR: +say "DONE." +cat < +Fixtures live in the bucket and survive node restarts; regenerate only if the +bucket was wiped: python gen_s3_fixtures.py --bucket s3://arrowrs-bench-21f6c795 - python run_matrix.py --wide-path s3://arrowrs-bench-21f6c795/wide_schema/primitives \\ - --imagenet-path s3://arrowrs-bench-21f6c795/imagenet/parquet + +Then: + + python run_matrix.py --wide-path \$P --imagenet-path \$IMG EOF From 63657d5f33bcdada7a4d38c4241c34b6184ce715 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Tue, 4 Aug 2026 11:56:21 -0700 Subject: [PATCH 043/135] [Data] arrow-rs: derive column-prefetch bucket as 4x column_fetch_mb One tunable (column_fetch_mb, the column-group batch size); the prefetch bucket the byte-semaphore keeps full defaults to 4 batches (one decoding + ~3 in flight), so scaling the batch knob scales the bucket with it. Explicit arrow_rs_column_prefetch_budget_mb / env still overrides (0 = sequential, the benchmark A/B escape hatch). Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../readers/arrow_rs_parquet_file_reader.py | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index 5d1191d39090..590965e70663 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -274,20 +274,21 @@ # Knob ``arrow_rs_column_prefetch_budget_mb`` — crate arg ``column_prefetch_budget_mb``. # Compressed bytes the column-windowing path may prefetch AHEAD of its (single) -# decoder. Column groups are fetched concurrently, gated by a byte-denominated +# decoder — the "bucket" it tries to keep full. DERIVED by default: 4 × +# ``column_fetch_mb``, i.e. a bucket of four column-group batches, so tuning the +# one batch-size knob scales the bucket with it and there is nothing separate to +# tune. Column groups are fetched concurrently, gated by a byte-denominated # semaphore: each in-order fetch acquires permits equal to its compressed size and # releases them when the decoder finishes (drops) that group — so fetch concurrency -# self-adjusts to the fetch:decode speed ratio (a slow network gets budget/group_size -# parallel GETs; a slow decoder backpressures fetching to a halt) and peak prefetch -# memory is the budget by construction, never an estimate. Decode itself stays +# self-adjusts to the fetch:decode speed ratio (a slow network gets ~4 parallel +# GETs; a slow decoder backpressures fetching to a halt) and peak prefetch memory +# is the bucket size by construction, never an estimate. Decode itself stays # one-group-at-a-time (that bound is the wide-schema memory fix; see -# ``column_fetch_mb``). Adds at most ``budget`` MB of compressed bytes to the -# working set (64 MB default — noise next to the decoded output) in exchange for -# overlapping S3 latency with decode. 0 = strictly sequential fetch->decode->fetch -# (the pre-prefetch behavior). Tuning: raise if ``cpu_over_wall`` on a wide S3 read -# stays well under 1 (decoder starving); lower/zero only to chase a memory ceiling. +# ``column_fetch_mb``). Explicitly setting this overrides the 4× derivation +# (benchmark escape hatch); 0 = strictly sequential fetch->decode->fetch. +# ``-1`` sentinel = unset -> derive. _ARROW_RS_COLUMN_PREFETCH_BUDGET_MB = env_integer( - "RAY_DATA_ARROW_RS_COLUMN_PREFETCH_BUDGET_MB", 64 + "RAY_DATA_ARROW_RS_COLUMN_PREFETCH_BUDGET_MB", -1 ) # Parquet-format kwargs (``pds.ParquetFileFormat``) that tune PyArrow's I/O @@ -347,7 +348,8 @@ class _ArrowRsTuning(NamedTuple): fetch_window_mb: int prefetch_windows: int column_fetch_mb: int - column_prefetch_budget_mb: int + # None means "derive at the call site": 4 x column_fetch_mb. + column_prefetch_budget_mb: Optional[int] # There is deliberately NO per-type support gate: every type Parquet can store @@ -1172,9 +1174,11 @@ def resolve(key: str, default: int, minimum: int) -> int: column_fetch_mb=resolve( "arrow_rs_column_fetch_mb", _ARROW_RS_COLUMN_FETCH_MB, 0 ), - column_prefetch_budget_mb=resolve( + column_prefetch_budget_mb=resolve_optional( "arrow_rs_column_prefetch_budget_mb", - _ARROW_RS_COLUMN_PREFETCH_BUDGET_MB, + None + if _ARROW_RS_COLUMN_PREFETCH_BUDGET_MB < 0 + else _ARROW_RS_COLUMN_PREFETCH_BUDGET_MB, 0, ), ) @@ -1647,7 +1651,14 @@ def _iter_native_tables( prefetch_windows=tuning.prefetch_windows, predicate_json=predicate_json, column_fetch_mb=tuning.column_fetch_mb, - column_prefetch_budget_mb=tuning.column_prefetch_budget_mb, + # The prefetch bucket defaults to 4 column-group batches: one + # decoding + ~3 in flight keeps the (single) decoder fed across + # fetch:decode ratios without a second knob to tune. + column_prefetch_budget_mb=( + tuning.column_prefetch_budget_mb + if tuning.column_prefetch_budget_mb is not None + else 4 * tuning.column_fetch_mb + ), ) else: reader = ray_data_arrow_rs.read_row_groups( From d4bbfd6ee86d91d885608c109b6c75c03372f166 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Tue, 4 Aug 2026 14:14:36 -0700 Subject: [PATCH 044/135] [Data] Unify arrow-rs S3 read paths under one budget-gated prefetch driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously the crate had two prefetch mechanisms on S3: row-windowed streaming used a fixed count-based pipeline (prefetch_windows=2 windows in flight), while the wide-schema column-windowing path used a byte-denominated semaphore ("bucket"). A fixed depth is the wrong shape for prefetch: if a window fetches 5x slower than it decodes, depth 2 starves the decoder; if it fetches faster, depth N overshoots memory by N windows. Every S3 read shape now decomposes into prefetchable *units* — row windows (~fetch_window_mb compressed of all projected columns, page-aligned via the offset index) or column groups (~column_fetch_mb of some columns, all rows) — and all units flow through ONE driver (drive_s3): an admission loop acquires semaphore permits equal to each unit's exact compressed size (from the footer) and spawns its ranged GET; a single in-order decoder serves entirely from the prefetched bytes; dropping a decoded unit releases its permits and wakes the next fetch. Fetch concurrency self-adjusts to the fetch:decode ratio and peak prefetch memory is the bucket size by construction. K-split survives as pure dispatch (K row partitions, each running the same driver, each with its own bucket) since parallel decode is the point of that shape. Changes: - drive_unit + spawn_window + drive_colwindowed replaced by plan_s3_units + drive_s3 (+ window_fetch_plan, which computes the exact byte ranges a window decode requests: dictionary page + overlapping data-page span per leaf, off the same offset index the decoder's RowSelection uses). - prefetch_windows knob removed; column_prefetch_budget_mb generalized to prefetch_budget_mb (env RAY_DATA_ARROW_RS_PREFETCH_BUDGET_MB, dataset_kwarg arrow_rs_prefetch_budget_mb; default derives 4 x max(fetch_window_mb, column_fetch_mb)). - Column partitioning now sizes/expands by schema ROOT (a struct column is one indivisible unit summing its leaf chunks), fixing a latent nested-schema bug where leaf indices were assumed == root indices. - New Rust tests: window plans vs whole chunks, sub-window strictness, an end-to-end proof that decode is served entirely from planned ranges at non-page-aligned offsets, and the windows-vs-hstack planning decision. Rust 33/33; arrow-rs suite 88 passed (incl. moto S3 order tests at bucket sizes 0/1/64); parquet suites 284+13 passed. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../native/ray_data_arrow_rs/Cargo.lock | 1 + .../native/ray_data_arrow_rs/src/lib.rs | 1020 ++++++++++------- .../readers/arrow_rs_parquet_file_reader.py | 108 +- .../readers/parquet_file_reader.py | 3 +- .../test_arrow_rs_parquet_reader.py | 23 +- 5 files changed, 682 insertions(+), 473 deletions(-) diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock index 633ca51182fe..a8eeee651726 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/Cargo.lock @@ -1572,6 +1572,7 @@ name = "ray_data_arrow_rs" version = "0.1.0" dependencies = [ "arrow", + "bytes", "futures", "object_store", "parquet", diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs index cdb1547d1793..255d300d3b60 100644 --- a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs +++ b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/src/lib.rs @@ -37,13 +37,18 @@ //! stream (K=1). Output is order-preserving (per-unit channels drained in order), //! and the decode batch is byte-budgeted just like the local path. //! -//! Within a single stream, consecutive fetch windows are pipelined by -//! `prefetch_windows` (default 2): window N+1's GET is issued while window N -//! decodes, hiding S3 first-byte latency behind decode without staging the whole -//! row group. depth=1 restores the strictly-serial windows. This is orthogonal to -//! K: K adds parallel streams (spatial split), prefetch overlaps fetch/decode -//! within one stream. Both stay memory-bounded knobs -//! (`≈ k * prefetch_windows * fetch_window` compressed in flight). +//! Within a single stream, every read shape decomposes into prefetchable *units* +//! — row windows (`~fetch_window_mb` compressed of all projected columns) for +//! ordinary groups, column groups (`~column_fetch_mb` compressed of some columns, +//! all rows) for wide ones — and all units flow through ONE mechanism (`drive_s3`): +//! a byte-denominated semaphore ("the bucket", `prefetch_budget_mb`) admits ranged +//! GETs concurrently until the bucket is full, while a single decoder consumes the +//! prefetched bytes strictly in order; a decoded unit dropping its bytes releases +//! its permits and wakes the next fetch. Fetch concurrency thus self-adjusts to +//! the fetch:decode speed ratio and peak prefetch memory is the bucket size by +//! construction. This is orthogonal to K: K adds parallel streams (spatial +//! split), each with its own bucket (`≈ k * prefetch_budget` compressed in +//! flight). //! //! Public API (consumed by `ArrowRsParquetFileReader` on the Python side via //! `pa.RecordBatchReader.from_stream(...)`): @@ -54,11 +59,12 @@ //! read_row_groups_s3(bucket, key, region, anonymous, endpoint=None, ...creds..., //! row_groups=None, columns=None, batch_size=131072, //! decode_budget_bytes=2*1024*1024, fetch_window_mb=16, k=1, -//! split_threshold_bytes=128*1024*1024, prefetch_windows=2) +//! split_threshold_bytes=128*1024*1024, predicate_json=None, +//! column_fetch_mb=16, prefetch_budget_mb=64) mod predicate; -use std::collections::{HashMap, HashSet, VecDeque}; +use std::collections::{HashMap, HashSet}; use std::fs::File; use std::sync::mpsc::{sync_channel, Receiver}; use std::thread; @@ -301,10 +307,12 @@ fn projection_mask( } } -/// Ordered leaf-column indices for a projection (flat schema: leaf index == root -/// field index == column-chunk index). Mirrors `projection_mask`'s name matching so -/// the two always agree on which columns are read. -fn projected_leaf_indices( +/// Ordered ROOT (top-level field) indices for a projection. Mirrors +/// `projection_mask`'s name matching so the two always agree on which columns +/// are read. Note these are root indices, not leaf/column-chunk indices — use +/// [`leaves_under_roots`] to expand to the chunks a root projection touches +/// (identity for flat schemas, several leaves per root for structs/lists). +fn projected_root_indices( parquet_schema: &parquet::schema::types::SchemaDescriptor, columns: &Option>, ) -> Vec { @@ -321,12 +329,36 @@ fn projected_leaf_indices( } } -/// `(leaf index, compressed size)` for the projected columns of a row group, in -/// ascending leaf order — the input to `partition_columns_by_budget`. -fn projected_col_sizes(rgm: &RowGroupMetaData, leaves: &[usize]) -> Vec<(usize, u64)> { - leaves +/// All leaf-column (column-chunk) indices under the given root fields, in +/// ascending leaf order — exactly the chunks the decoder requests for a root +/// projection. Flat schemas: identity. +fn leaves_under_roots( + schema: &parquet::schema::types::SchemaDescriptor, + roots: &[usize], +) -> Vec { + (0..schema.num_columns()) + .filter(|&l| roots.contains(&schema.get_column_root_idx(l))) + .collect() +} + +/// `(root index, compressed size)` for the projected top-level columns of a row +/// group, in ascending root order — the input to `partition_columns_by_budget`. +/// A root's size is the sum of its leaf chunks, so a struct column is weighed +/// (and later fetched/hstacked) as one indivisible unit. +fn projected_root_sizes( + schema: &parquet::schema::types::SchemaDescriptor, + rgm: &RowGroupMetaData, + roots: &[usize], +) -> Vec<(usize, u64)> { + roots .iter() - .map(|&i| (i, rgm.column(i).compressed_size().max(0) as u64)) + .map(|&r| { + let sz = leaves_under_roots(schema, &[r]) + .iter() + .map(|&l| rgm.column(l).compressed_size().max(0) as u64) + .sum(); + (r, sz) + }) .collect() } @@ -886,14 +918,6 @@ fn read_row_groups( /// bounds resident memory while still letting a task fetch/decode one batch ahead. const S3_CHANNEL_DEPTH: usize = 2; -/// Per-window decoded buffer, used by the `prefetch_windows` pipeline. Kept at 1: -/// the cross-window prefetch (fetching window N+1 while N decodes) is what hides S3 -/// latency; we do NOT also want each in-flight window buffering several decoded -/// batches, which would multiply the decode transient. So each window may hold at -/// most one decoded batch, and `prefetch_windows` controls how many windows are in -/// flight at once. -const S3_WINDOW_CHANNEL_DEPTH: usize = 1; - /// A sync `RecordBatchReader` fed by K background tokio tasks (one per row-range /// unit), each draining its unit into a bounded async channel. The consumer drains /// channels in ascending unit order — so at most `k * S3_CHANNEL_DEPTH` batches are @@ -986,187 +1010,22 @@ fn effective_window_step(window_rows: usize, max_page_rows: usize, len: usize) - window_rows.max(max_page_rows).max(1) } -/// Spawn a background task that fetches + decodes ONE fetch window — rows -/// `[w, w+wlen)` within row group `rg` — streaming its batches into a bounded -/// channel, and return the receiver. Building the stream is cheap (metadata is -/// already loaded); the S3 fetch for this window's pages is issued when the task -/// first polls the stream. So the moment this returns, that fetch is in flight on -/// the runtime — which is what lets the caller prefetch window N+1 while draining -/// window N. `S3_WINDOW_CHANNEL_DEPTH` bounds how far ahead a single window decodes. -fn spawn_window( - store: Arc, - path: ObjPath, - meta: ArrowReaderMetadata, - mask: ProjectionMask, - rg: usize, - w: usize, - wlen: usize, - batch_rows: usize, -) -> mpsc::Receiver> { - let (tx, rx) = mpsc::channel::>(S3_WINDOW_CHANNEL_DEPTH); - tokio::spawn(async move { - // Select rows [w, w+wlen) WITHIN this row group (we restrict to `rg`), so - // only this window's pages are fetched (page index skips the rest by byte - // range). - let sel = RowSelection::from(vec![RowSelector::skip(w), RowSelector::select(wlen)]); - let reader = ParquetObjectReader::new(store, path); - let built = ParquetRecordBatchStreamBuilder::new_with_metadata(reader, meta) - .with_row_groups(vec![rg]) - .with_row_selection(sel) - .with_batch_size(batch_rows) - .with_projection(mask) - .build(); - let mut stream = match built { - Ok(s) => s, - Err(e) => { - let _ = tx.send(Err(ArrowError::ExternalError(Box::new(e)))).await; - return; - } - }; - while let Some(item) = stream.next().await { - let is_err = item.is_err(); - let msg = item.map_err(|e| ArrowError::ExternalError(Box::new(e))); - if tx.send(msg).await.is_err() { - return; // consumer dropped - } - if is_err { - return; - } - } - }); - rx -} - -/// Drive one unit (a list of contiguous `(rg, start, len)` sub-ranges, in order) -/// over the async object store, sending decoded batches to `tx` in row order. -/// -/// The unit's rows are sliced into fetch windows, each holding ~`fetch_window_mb` -/// of compressed bytes (knob 2); the decode batch inside a window is byte-budgeted -/// (knob 1). `prefetch_windows` (knob 3) is the pipeline depth: we keep that many -/// window decoders in flight at once via [`spawn_window`], draining their channels -/// in window order. depth=1 is the old strictly-serial behavior (fetch W0, decode -/// W0, fetch W1, ...); depth=2 issues window N+1's S3 fetch while window N decodes, -/// hiding the fetch latency behind the decode. Resident memory stays bounded to -/// ~`prefetch_windows` windows of compressed bytes (plus one decoded batch each) — -/// far below a whole-row-group prefetch, and still a knob. -#[allow(clippy::too_many_arguments)] -async fn drive_unit( - store: Arc, - path: ObjPath, - meta: ArrowReaderMetadata, - mask: ProjectionMask, - subranges: Vec<(usize, usize, usize)>, - budget_bytes: u64, - batch_clamp: usize, - fetch_window_mb: u64, - prefetch_windows: usize, - tx: mpsc::Sender>, -) { - // Flatten every (row group, window) this unit will read into one ordered list - // of specs. We enumerate here only — no fetch happens until a window is spawned. - let mut specs: Vec<(usize, usize, usize, usize)> = Vec::new(); // (rg, w, wlen, batch_rows) - for (rg, start, len) in subranges { - let rgm = meta.metadata().row_group(rg); - let batch_rows = byte_budget_rows( - rgm.total_byte_size(), - rgm.num_rows(), - batch_clamp, - budget_bytes, - ); - let window_rows = window_rows_for(rgm, fetch_window_mb); - let end = start + len; - // Never window below the coarsest column's largest page (see max_page_rows): - // a sub-page window re-decodes that page in every window it overlaps. This - // collapses wide/short row groups (one page per column) to a single window - // — parity with no windowing — while tall multi-page groups still split. - let step = effective_window_step(window_rows, max_page_rows(meta.metadata(), rg), len); - let mut w = start; - while w < end { - let wlen = step.min(end - w); - specs.push((rg, w, wlen, batch_rows)); - w += wlen; - } - } - - // Bounded look-ahead: keep at most `depth` window decoders in flight, draining - // their channels in spec order so output stays row-ordered while up to `depth` - // windows fetch+decode concurrently. - let depth = prefetch_windows.max(1); - let mut in_flight: VecDeque>> = VecDeque::new(); - let mut next = 0usize; - // Prime the pipeline: start `depth` window fetches concurrently. - while next < specs.len() && in_flight.len() < depth { - let (rg, w, wlen, br) = specs[next]; - in_flight.push_back(spawn_window( - store.clone(), - path.clone(), - meta.clone(), - mask.clone(), - rg, - w, - wlen, - br, - )); - next += 1; - } - while let Some(mut rx) = in_flight.pop_front() { - while let Some(item) = rx.recv().await { - let is_err = item.is_err(); - if tx.send(item).await.is_err() { - return; // consumer dropped - } - if is_err { - return; - } - } - // Front window exhausted — top the pipeline back up to `depth`, so window - // N+depth's fetch starts as soon as window N's finishes draining. - if next < specs.len() { - let (rg, w, wlen, br) = specs[next]; - in_flight.push_back(spawn_window( - store.clone(), - path.clone(), - meta.clone(), - mask.clone(), - rg, - w, - wlen, - br, - )); - next += 1; - } - } -} - -/// Drive selected row groups for a WIDE projection by **column-windowing**: within -/// each row group, read the projected columns in sequential groups (each under the -/// compressed-byte budget), collect every group's batches, then hstack them -/// position-wise into full-width batches sent in row order. -/// -/// Why sequential groups: the async reader's `InMemoryRowGroup` fetches *every* -/// projected column chunk for a row group into memory before decoding and holds them -/// all resident. For a wide schema that whole-group compressed buffer is the entire -/// S3 memory regression (PyArrow releases column chunks as it decodes; we didn't). -/// Reading one column group at a time — dropping its stream before the next fetches — -/// bounds resident compressed bytes to ~`budget` instead of the whole group. Peak = -/// `budget` + the fully decoded row group, and the decoded row group is the output we -/// must produce anyway (PyArrow holds it too), so this asymptotes to PyArrow parity. -/// -/// Columns are independent, so unlike row-windowing this NEVER re-decodes a page. -/// All groups read the same rows with the same `batch_size`, so their batches align -/// 1:1 and hstack by position; ascending-leaf group order reproduces schema order. -#[allow(clippy::too_many_arguments)] -/// One column group's compressed bytes, prefetched from S3, plus the -/// byte-budget permits it holds. Dropping this (after the group is decoded) -/// frees the bytes AND releases the permits — which is what wakes the -/// admission loop to launch the next group's fetch. That drop-to-wake handoff -/// is the whole backpressure mechanism: memory pressure stays ~constant at -/// `prefetch_budget` compressed bytes without any explicit signalling code. -struct PrefetchedGroup { +/// One prefetched unit's compressed bytes, plus the byte-budget permits they +/// hold. A unit is either a ROW WINDOW (`sel = Some((skip, take))`, all projected +/// columns) or a COLUMN GROUP (`sel = None`, a slice of the projection over all +/// rows) — the decode side reassembles accordingly; the fetch side treats both +/// identically. The permits travel with the bytes (into the decode stream's +/// `PrefetchedReader`), so dropping the decoded stream frees the bytes AND +/// releases the permits — which is what wakes the admission loop to launch the +/// next unit's fetch. That drop-to-wake handoff is the whole backpressure +/// mechanism: memory pressure stays ~constant at `prefetch_budget` compressed +/// bytes without any explicit signalling code. +struct PrefetchedUnit { mask: ProjectionMask, + sel: Option<(usize, usize)>, ranges: Vec>, data: Vec, - _permit: tokio::sync::OwnedSemaphorePermit, + permit: tokio::sync::OwnedSemaphorePermit, } /// Find `want` inside one of the prefetched `ranges` and return the matching @@ -1183,15 +1042,17 @@ fn slice_prefetched(ranges: &[Range], data: &[Bytes], want: &Range) -> None } -/// `AsyncFileReader` that serves a column group's page reads from its -/// prefetched buffers instead of S3. The decode stream built on top of this -/// never touches the network — the fetch already happened, budget-gated, in -/// the admission loop. Requests are always sub-ranges of whole column chunks -/// (page reads within a chunk), so containment lookup suffices. +/// `AsyncFileReader` that serves a unit's page reads from its prefetched +/// buffers instead of S3. The decode stream built on top of this never touches +/// the network — the fetch already happened, budget-gated, in the admission +/// loop. Requests are always sub-ranges of the prefetched ranges (page reads +/// within a chunk, or within a window's page span), so containment lookup +/// suffices. Owning the permit ties the budget release to the stream's drop. struct PrefetchedReader { ranges: Vec>, data: Vec, meta: Arc, + _permit: tokio::sync::OwnedSemaphorePermit, } impl AsyncFileReader for PrefetchedReader { @@ -1234,89 +1095,328 @@ fn group_fetch_plan( (ranges, bytes.div_ceil(1024)) } -async fn drive_colwindowed( +/// Exact byte ranges a ROW-WINDOW decode will request from the store: for each +/// projected leaf column of row group `rg`, the dictionary page (when present) +/// plus the contiguous span of data pages overlapping rows `[w, w+wlen)` — read +/// off the same offset index the decoder's `RowSelection` uses to skip pages, +/// so prefetch and decode always agree on which bytes are needed. A column +/// without an offset index, or a window covering the whole group, falls back to +/// the whole column chunk — also exactly what the decoder requests in that +/// case. Returns the ranges plus their compressed KiB (exact, from the footer) +/// for budget accounting, like [`group_fetch_plan`]. +fn window_fetch_plan( + md: &parquet::file::metadata::ParquetMetaData, + rg: usize, + leaves: &[usize], + w: usize, + wlen: usize, +) -> (Vec>, u64) { + let rgm = md.row_group(rg); + let num_rows = rgm.num_rows().max(0); + let rg_oi = md.offset_index().and_then(|oi| oi.get(rg)); + let whole = w == 0 && wlen as i64 >= num_rows; + let (w0, w1) = (w as i64, (w + wlen) as i64); + let mut ranges = Vec::with_capacity(leaves.len()); + let mut bytes = 0u64; + for &leaf in leaves { + let cc = rgm.column(leaf); + let (chunk_start, chunk_len) = cc.byte_range(); + let locs = rg_oi + .and_then(|oi| oi.get(leaf)) + .map(|c| c.page_locations()) + .filter(|l| !l.is_empty()); + let locs = match (whole, locs) { + (false, Some(l)) => l, + _ => { + bytes += chunk_len; + ranges.push(chunk_start..chunk_start + chunk_len); + continue; + } + }; + // Dictionary page: sits between the chunk start and the first data + // page, and every window of a dictionary-encoded chunk needs it. + let first_data = locs[0].offset.max(0) as u64; + if cc.dictionary_page_offset().is_some() && first_data > chunk_start { + bytes += first_data - chunk_start; + ranges.push(chunk_start..first_data); + } + // Contiguous span of the data pages overlapping [w, w+wlen). Pages are + // laid out back-to-back within a chunk, so one range covers the run. + let mut span: Option<(u64, u64)> = None; + for (i, loc) in locs.iter().enumerate() { + let rows_end = locs + .get(i + 1) + .map(|next| next.first_row_index) + .unwrap_or(num_rows); + if loc.first_row_index < w1 && rows_end > w0 { + let s = loc.offset.max(0) as u64; + let e = s + loc.compressed_page_size.max(0) as u64; + span = Some(match span { + None => (s, e), + Some((a, _)) => (a, e), + }); + } + } + if let Some((s, e)) = span { + bytes += e - s; + ranges.push(s..e); + } + } + (ranges, bytes.div_ceil(1024)) +} + +/// How one row group's prefetched units reassemble into output batches. +enum RgDecode { + /// N row-window units: decode each in order, stream every batch straight out. + Windows(usize), + /// N column-group units: decode all N (row-aligned), then hstack to full width. + Hstack(usize), +} + +/// Decode structure of one (row group, sub-range), in output order. +struct RgPlan { + rg: usize, + batch_rows: usize, + decode: RgDecode, +} + +/// Fetch plan of one unit, in decode order: what to project, which rows +/// (`None` = all), which bytes, and their compressed KiB for budget accounting. +struct UnitFetch { + mask: ProjectionMask, + sel: Option<(usize, usize)>, + ranges: Vec>, + kib: u64, +} + +/// Plan every `(row group, start, len)` sub-range into prefetchable units. +/// The split axis is chosen per row group by its shape: +/// * WIDE (the projected roots' compressed bytes partition into >1 group under +/// `colwindow_budget`, whole-group read): COLUMN GROUPS — each unit is a +/// slice of the projection over all the group's rows. The async reader's +/// `InMemoryRowGroup` otherwise stages every projected chunk of the group at +/// once, which for a 5000-column schema was the entire S3 memory regression; +/// one group at a time bounds that to ~`colwindow_budget`, and columns are +/// independent so no page is ever decoded twice. +/// * otherwise: ROW WINDOWS — each unit is ~`fetch_window_mb` compressed bytes +/// of ALL projected columns, page-aligned via the offset index (see +/// `effective_window_step`; without an offset index the group collapses to +/// one window). +/// Both unit kinds flow through the same byte-budget admission loop in +/// [`drive_s3`]; only the decode-side reassembly differs. Planning globally +/// (not per row group) lets the prefetcher run ahead across row-group +/// boundaries. +#[allow(clippy::too_many_arguments)] +fn plan_s3_units( + meta: &ArrowReaderMetadata, + full_mask: &ProjectionMask, + roots: &[usize], + subranges: &[(usize, usize, usize)], + batch_clamp: usize, + decode_budget: u64, + fetch_window_mb: u64, + colwindow_budget: u64, +) -> (Vec, Vec) { + let md = meta.metadata(); + let schema_descr = md.file_metadata().schema_descr(); + let leaves = leaves_under_roots(schema_descr, roots); + let mut rg_plans: Vec = Vec::with_capacity(subranges.len()); + let mut units: Vec = Vec::new(); + for &(rg, start, len) in subranges { + let rgm = md.row_group(rg); + let batch_rows = byte_budget_rows( + rgm.total_byte_size(), + rgm.num_rows(), + batch_clamp, + decode_budget, + ); + // Column groups only apply to whole-group reads (a K-split sub-range is + // by definition a tall group being split by rows, not columns). + let whole = start == 0 && len == rgm.num_rows().max(0) as usize; + let groups = if whole && colwindow_budget > 0 { + partition_columns_by_budget( + &projected_root_sizes(schema_descr, rgm, roots), + colwindow_budget, + ) + } else { + Vec::new() + }; + if groups.len() > 1 { + let n = groups.len(); + for g in groups { + let (ranges, kib) = group_fetch_plan(rgm, &leaves_under_roots(schema_descr, &g)); + units.push(UnitFetch { + mask: ProjectionMask::roots(schema_descr, g), + sel: None, + ranges, + kib, + }); + } + rg_plans.push(RgPlan { + rg, + batch_rows, + decode: RgDecode::Hstack(n), + }); + } else { + // Never window below the coarsest column's largest page (see + // max_page_rows): a sub-page window re-decodes that page in every + // window it overlaps. Wide/short groups (one page per column) + // collapse to a single window; tall multi-page groups still split. + let step = effective_window_step( + window_rows_for(rgm, fetch_window_mb), + max_page_rows(md, rg), + len, + ); + let (mut w, end) = (start, start + len); + let mut n = 0usize; + while w < end { + let wlen = step.min(end - w); + let (ranges, kib) = window_fetch_plan(md, rg, &leaves, w, wlen); + units.push(UnitFetch { + mask: full_mask.clone(), + sel: Some((w, wlen)), + ranges, + kib, + }); + w += wlen; + n += 1; + } + rg_plans.push(RgPlan { + rg, + batch_rows, + decode: RgDecode::Windows(n), + }); + } + } + (rg_plans, units) +} + +/// Receive the next prefetched unit (in plan order) and build its decode +/// stream, which serves every page read from the prefetched bytes — never the +/// network. The unit's budget permits ride inside the stream's +/// `PrefetchedReader`, so dropping the stream is what releases them. +async fn next_unit_stream( + hrx: &mut mpsc::Receiver>>, + meta: &ArrowReaderMetadata, + rg: usize, + batch_rows: usize, +) -> Result< + parquet::arrow::async_reader::ParquetRecordBatchStream, + ArrowError, +> { + let handle = hrx.recv().await.ok_or_else(|| { + ArrowError::ExternalError(Box::new(ParquetError::General( + "prefetch: admission loop ended early".to_string(), + ))) + })?; + let unit = match handle.await { + Ok(Ok(u)) => u, + Ok(Err(e)) => return Err(e), + Err(e) => return Err(ArrowError::ExternalError(Box::new(e))), // task panicked + }; + let PrefetchedUnit { + mask, + sel, + ranges, + data, + permit, + } = unit; + let reader = PrefetchedReader { + ranges, + data, + meta: Arc::clone(meta.metadata()), + _permit: permit, + }; + let mut builder = ParquetRecordBatchStreamBuilder::new_with_metadata(reader, meta.clone()) + .with_row_groups(vec![rg]) + .with_batch_size(batch_rows) + .with_projection(mask); + if let Some((skip, take)) = sel { + builder = builder.with_row_selection(RowSelection::from(vec![ + RowSelector::skip(skip), + RowSelector::select(take), + ])); + } + builder + .build() + .map_err(|e| ArrowError::ExternalError(Box::new(e))) +} + +/// THE single S3 decode driver: every read shape — row-windowed streaming, +/// wide-schema column groups, and each K-split row partition — flows through +/// here. Two halves, connected by a byte-denominated semaphore ("the bucket"): +/// +/// * admission loop (spawned): for each planned unit IN ORDER, acquire +/// permits equal to its compressed size (clamped to the whole budget so an +/// oversized unit can still run, alone), then spawn its ranged GET. Fetches +/// whose permits fit run CONCURRENTLY — that's what overlaps S3 latency +/// with decode — while `acquire` blocks the loop the moment the bucket is +/// spent. +/// * decoder (this task): strictly one unit at a time (bounds decode +/// scratch), served entirely from the prefetched bytes. Dropping a decoded +/// unit's stream frees its bytes AND releases its permits, waking the +/// admission loop: constant memory pressure, fetch concurrency +/// self-adjusting to the fetch:decode speed ratio, no rate estimation +/// anywhere. +/// +/// `prefetch_budget_mb == 0` degrades to strict fetch→decode→fetch (every +/// acquire is for the full 1-permit budget). Output batches are sent to `tx` +/// in row order. +#[allow(clippy::too_many_arguments)] +async fn drive_s3( store: Arc, path: ObjPath, meta: ArrowReaderMetadata, out_schema: SchemaRef, - leaves: Vec, - selected: Vec, - budget_bytes: u64, + full_mask: ProjectionMask, + roots: Vec, + subranges: Vec<(usize, usize, usize)>, batch_clamp: usize, decode_budget: u64, + fetch_window_mb: u64, + colwindow_budget: u64, prefetch_budget_mb: u64, tx: mpsc::Sender>, ) { - // Send an error downstream and stop (mirrors spawn_window's error contract). + // Send an error downstream and stop. macro_rules! send_err { ($e:expr) => {{ - let _ = tx.send(Err(ArrowError::ExternalError(Box::new($e)))).await; + let _ = tx.send(Err($e)).await; return; }}; } - // --- sync prelude: plan EVERY row group's column partition + fetch ranges - // up front (borrows `meta`, so it must finish before the first `.await`). - // Planning globally (not per row group) lets the prefetcher run ahead - // across row-group boundaries too. --- - struct RgPlan { - rg: usize, - batch_rows: usize, - n_groups: usize, - } - let mut rg_plans: Vec = Vec::with_capacity(selected.len()); - // (mask, chunk byte ranges, compressed KiB) per column group, in decode order. - let mut fetch_plans: Vec<(ProjectionMask, Vec>, u64)> = Vec::new(); - { - let schema_descr = meta.metadata().file_metadata().schema_descr(); - for &rg in &selected { - let rgm = meta.metadata().row_group(rg); - let batch_rows = byte_budget_rows( - rgm.total_byte_size(), - rgm.num_rows(), - batch_clamp, - decode_budget, - ); - let groups = - partition_columns_by_budget(&projected_col_sizes(rgm, &leaves), budget_bytes); - rg_plans.push(RgPlan { - rg, - batch_rows, - n_groups: groups.len(), - }); - for g in groups { - let (ranges, kib) = group_fetch_plan(rgm, &g); - fetch_plans.push((ProjectionMask::roots(schema_descr, g), ranges, kib)); - } - } - } + let (rg_plans, units) = plan_s3_units( + &meta, + &full_mask, + &roots, + &subranges, + batch_clamp, + decode_budget, + fetch_window_mb, + colwindow_budget, + ); // --- admission loop: budget-gated concurrent prefetch --- - // A semaphore holds `prefetch_budget` in KiB-denominated permits. For each - // column group IN ORDER: acquire permits equal to its compressed size - // (clamped to the whole budget so an oversized group can still run, alone), - // then spawn its ranged GET. Fetches whose permits fit run CONCURRENTLY — - // that's what overlaps S3 latency with decode — while acquire() blocks the - // loop the moment the budget is spent. The decoder dropping a finished - // group releases its permits and un-blocks the loop: constant memory - // pressure with zero idle gaps, no rate estimation anywhere. - // `prefetch_budget_mb == 0` degrades to one-group-at-a-time (the old - // strictly-sequential behavior) because every acquire is for the full - // 1-permit budget. let budget_kib = prefetch_budget_mb.saturating_mul(1024).max(1); let budget_kib = budget_kib.min(u32::MAX as u64 / 2); let sem = Arc::new(Semaphore::new(budget_kib as usize)); // Handles are tiny; the byte budget is what actually bounds prefetch. The - // channel only needs to keep the admission loop from racing unboundedly - // far ahead in *task count* when groups are small. + // channel only keeps the admission loop from racing unboundedly far ahead + // in *task count* when units are small. let (htx, mut hrx) = - mpsc::channel::>>(64); + mpsc::channel::>>(64); { let store = store.clone(); let path = path.clone(); - let plans = std::mem::take(&mut fetch_plans); tokio::spawn(async move { - for (mask, ranges, kib) in plans { + for UnitFetch { + mask, + sel, + ranges, + kib, + } in units + { let want = kib.clamp(1, budget_kib) as u32; let permit = match sem.clone().acquire_many_owned(want).await { Ok(p) => p, @@ -1326,11 +1426,12 @@ async fn drive_colwindowed( let path = path.clone(); let handle = tokio::spawn(async move { match store.get_ranges(&path, &ranges).await { - Ok(data) => Ok(PrefetchedGroup { + Ok(data) => Ok(PrefetchedUnit { mask, + sel, ranges, data, - _permit: permit, + permit, }), Err(e) => Err(ArrowError::ExternalError(Box::new(e))), } @@ -1342,72 +1443,74 @@ async fn drive_colwindowed( }); } - // --- decoder: strictly one column group at a time (bounds decode scratch; + // --- decoder: strictly one unit at a time (bounds decode scratch; // concurrency lives ONLY on the fetch side above) --- for plan in rg_plans { - let mut group_batches: Vec> = Vec::with_capacity(plan.n_groups); - for _ in 0..plan.n_groups { - let handle = match hrx.recv().await { - Some(h) => h, - None => send_err!(ParquetError::General( - "column-prefetch: admission loop ended early".to_string() - )), - }; - let group = match handle.await { - Ok(Ok(g)) => g, - Ok(Err(e)) => send_err!(e), - Err(e) => send_err!(e), // task panicked/cancelled - }; - let reader = PrefetchedReader { - ranges: group.ranges, - data: group.data, - meta: Arc::clone(meta.metadata()), - }; - let built = ParquetRecordBatchStreamBuilder::new_with_metadata(reader, meta.clone()) - .with_row_groups(vec![plan.rg]) - .with_batch_size(plan.batch_rows) - .with_projection(group.mask) - .build(); - let mut stream = match built { - Ok(s) => s, - Err(e) => send_err!(e), - }; - let mut batches = Vec::new(); - while let Some(item) = stream.next().await { - match item { - Ok(b) => batches.push(b), - Err(e) => send_err!(e), + match plan.decode { + RgDecode::Windows(n) => { + for _ in 0..n { + let mut stream = + match next_unit_stream(&mut hrx, &meta, plan.rg, plan.batch_rows).await { + Ok(s) => s, + Err(e) => send_err!(e), + }; + while let Some(item) = stream.next().await { + let is_err = item.is_err(); + let msg = item.map_err(|e| ArrowError::ExternalError(Box::new(e))); + if tx.send(msg).await.is_err() { + return; // consumer dropped + } + if is_err { + return; + } + } + // `stream` drops here -> window bytes freed, permits + // released, next fetch admitted. } } - group_batches.push(batches); - // `stream` (owning the PrefetchedReader) and `group._permit` drop - // here -> this group's compressed bytes are freed and its budget - // permits released -> the admission loop's pending acquire wakes - // and the next fetch launches. Decoded batches (the output) are - // retained for the hstack below, same as before. - } + RgDecode::Hstack(n) => { + let mut group_batches: Vec> = Vec::with_capacity(n); + for _ in 0..n { + let mut stream = + match next_unit_stream(&mut hrx, &meta, plan.rg, plan.batch_rows).await { + Ok(s) => s, + Err(e) => send_err!(e), + }; + let mut batches = Vec::new(); + while let Some(item) = stream.next().await { + match item { + Ok(b) => batches.push(b), + Err(e) => send_err!(ArrowError::ExternalError(Box::new(e))), + } + } + group_batches.push(batches); + // Group bytes + permits released here; decoded batches (the + // output) are retained for the hstack below. + } - // --- hstack the row-aligned batches into full-width batches --- - let nbatches = group_batches.first().map(|g| g.len()).unwrap_or(0); - if group_batches.iter().any(|g| g.len() != nbatches) { - send_err!(ArrowError::ComputeError(format!( - "column-window batch-count mismatch in row group {}: {:?}", - plan.rg, - group_batches.iter().map(|g| g.len()).collect::>() - ))); - } - for i in 0..nbatches { - let mut cols: Vec = Vec::with_capacity(out_schema.fields().len()); - for g in &group_batches { - cols.extend(g[i].columns().iter().cloned()); - } - match RecordBatch::try_new(out_schema.clone(), cols) { - Ok(b) => { - if tx.send(Ok(b)).await.is_err() { - return; // consumer dropped + // --- hstack the row-aligned batches into full-width batches --- + let nbatches = group_batches.first().map(|g| g.len()).unwrap_or(0); + if group_batches.iter().any(|g| g.len() != nbatches) { + send_err!(ArrowError::ComputeError(format!( + "column-window batch-count mismatch in row group {}: {:?}", + plan.rg, + group_batches.iter().map(|g| g.len()).collect::>() + ))); + } + for i in 0..nbatches { + let mut cols: Vec = Vec::with_capacity(out_schema.fields().len()); + for g in &group_batches { + cols.extend(g[i].columns().iter().cloned()); + } + match RecordBatch::try_new(out_schema.clone(), cols) { + Ok(b) => { + if tx.send(Ok(b)).await.is_err() { + return; // consumer dropped + } + } + Err(e) => send_err!(e), } } - Err(e) => send_err!(e), } } } @@ -1465,8 +1568,8 @@ fn build_s3_store( virtual_hosted_style=false, row_groups=None, columns=None, batch_size=131072, decode_budget_bytes=2*1024*1024, fetch_window_mb=16, k=1, split_threshold_bytes=134217728, - prefetch_windows=2, predicate_json=None, column_fetch_mb=256, - column_prefetch_budget_mb=64))] + predicate_json=None, column_fetch_mb=16, + prefetch_budget_mb=64))] #[allow(clippy::too_many_arguments)] fn read_row_groups_s3( py: Python<'_>, @@ -1490,17 +1593,17 @@ fn read_row_groups_s3( fetch_window_mb: u64, k: usize, split_threshold_bytes: u64, - prefetch_windows: usize, // See `read_row_groups`: statistics row-group pruning only. predicate_json: Option, // Compressed-byte budget per column group for the wide-schema column-windowing - // path (0 disables it). See `drive_colwindowed`. + // split axis (0 disables it). See `plan_s3_units`. column_fetch_mb: u64, - // Compressed bytes the column-window prefetcher may hold in flight/buffered - // ahead of the (single) decoder. Bounds memory by construction while letting - // enough GETs run concurrently to keep the decoder fed regardless of the - // fetch:decode speed ratio. 0 = strictly sequential (no overlap). - column_prefetch_budget_mb: u64, + // Compressed bytes the prefetcher may hold in flight/buffered ahead of the + // (single) decoder — "the bucket", shared by every unit kind. Bounds memory + // by construction while letting enough GETs run concurrently to keep the + // decoder fed regardless of the fetch:decode speed ratio. 0 = strictly + // sequential (no overlap). See `drive_s3`. + prefetch_budget_mb: u64, ) -> PyResult { let store = build_s3_store( &bucket, @@ -1556,69 +1659,34 @@ fn read_row_groups_s3( // K-split ONLY for a lone row group above the threshold with a page index — // the case Ray's fragment pool can't parallelize. Mirrors the local rule so - // crate-K and Ray's pool never multiply. Otherwise a single windowed stream - // (K=1) over all selected groups in order; Ray's pool parallelizes files. + // crate-K and Ray's pool never multiply. Otherwise a single driver (K=1) + // over all selected groups in order; Ray's pool parallelizes files. Each of + // the K streams gets its own prefetch bucket (decode parallelism is the + // point of the split), so ~`k * prefetch_budget` compressed may be in + // flight for this one deliberately-parallel shape. let split = k > 1 && selected.len() == 1 && meta.metadata().row_group(selected[0]).total_byte_size() as u64 >= split_threshold_bytes && meta.metadata().offset_index().is_some(); - // Column-windowing (wide-schema S3 memory fix): if any selected group's projected - // columns exceed the compressed budget, read them in sequential column groups so - // only one group's compressed chunks are resident at a time. Only for the - // non-split path (K-split handles the lone-huge-*tall* group); narrow reads - // partition to a single group and fall through to the streaming path unchanged. - let leaves = - projected_leaf_indices(meta.metadata().file_metadata().schema_descr(), &columns); - let colwindow_budget = column_fetch_mb.saturating_mul(1024 * 1024); - let colwindow = !split - && colwindow_budget > 0 - && selected.iter().any(|&rg| { - partition_columns_by_budget( - &projected_col_sizes(meta.metadata().row_group(rg), &leaves), - colwindow_budget, - ) - .len() - > 1 - }); - if colwindow { - let (tx, rx) = mpsc::channel::>(S3_CHANNEL_DEPTH); - rt.spawn(drive_colwindowed( - store.clone(), - obj_path.clone(), - meta.clone(), - schema.clone(), - leaves, - selected, - colwindow_budget, - batch_size, - decode_budget_bytes, - column_prefetch_budget_mb, - tx, - )); - return Ok(into_py_stream(Box::new(S3ChannelReader { - schema, - receivers: vec![rx], - cur: 0, - }))); - } - - // Build the per-unit sub-range lists (each becomes one task + one channel, - // drained in order). - let units: Vec> = if split { + // Build the per-stream sub-range lists (each becomes one drive_s3 task + + // one channel, drained in order). How a sub-range further splits into + // prefetchable units (row windows vs column groups) is decided per row + // group inside the driver — see `plan_s3_units`. + let stream_ranges: Vec> = if split { let rg = selected[0]; let total_rows = meta.metadata().row_group(rg).num_rows().max(0) as usize; let chunk = total_rows.div_ceil(k.max(1)).max(1); - let mut units = Vec::new(); + let mut ranges = Vec::new(); let mut start = 0usize; while start < total_rows { let len = chunk.min(total_rows - start); - units.push(vec![(rg, start, len)]); + ranges.push(vec![(rg, start, len)]); start += len; } - units + ranges } else { - // One unit: every selected group, whole, in order. + // One stream: every selected group, whole, in order. let subranges = selected .iter() .map(|&rg| { @@ -1632,23 +1700,27 @@ fn read_row_groups_s3( vec![subranges] }; - // Spawn one task per unit on the shared runtime; collect receivers in order. - let mut receivers = Vec::with_capacity(units.len()); - for subranges in units { + let roots = projected_root_indices(meta.metadata().file_metadata().schema_descr(), &columns); + let colwindow_budget = column_fetch_mb.saturating_mul(1024 * 1024); + + // Spawn one driver per stream on the shared runtime; collect receivers in order. + let mut receivers = Vec::with_capacity(stream_ranges.len()); + for subranges in stream_ranges { let (tx, rx) = mpsc::channel::>(S3_CHANNEL_DEPTH); receivers.push(rx); - let (store, path, meta, mask) = - (store.clone(), obj_path.clone(), meta.clone(), mask.clone()); - rt.spawn(drive_unit( - store, - path, - meta, - mask, + rt.spawn(drive_s3( + store.clone(), + obj_path.clone(), + meta.clone(), + schema.clone(), + mask.clone(), + roots.clone(), subranges, - decode_budget_bytes, batch_size, + decode_budget_bytes, fetch_window_mb, - prefetch_windows, + colwindow_budget, + prefetch_budget_mb, tx, )); } @@ -1915,6 +1987,160 @@ mod tests { assert_eq!(effective_window_step(0, 0, 1), 1); } + /// Write a 2-column, 1000-row parquet (data pages capped at ~100 rows, page + /// index on) into memory and load its metadata WITH the page index — the + /// fixture for the window/unit planning tests below. + fn windowed_fixture() -> (ArrowReaderMetadata, Bytes) { + use arrow::array::{Int64Array, StringArray}; + use arrow::datatypes::{DataType, Field, Schema}; + use parquet::arrow::arrow_writer::ArrowWriter; + use parquet::file::properties::WriterProperties; + + let schema = Arc::new(Schema::new(vec![ + Field::new("a", DataType::Int64, false), + Field::new("b", DataType::Utf8, false), + ])); + let a = Int64Array::from((0..1000i64).collect::>()); + let b = StringArray::from((0..1000).map(|i| format!("row-{i}")).collect::>()); + let batch = + RecordBatch::try_new(schema.clone(), vec![Arc::new(a), Arc::new(b)]).unwrap(); + let props = WriterProperties::builder() + .set_data_page_row_count_limit(100) + .set_write_batch_size(100) + .build(); + let mut buf = Vec::new(); + let mut w = ArrowWriter::try_new(&mut buf, schema, Some(props)).unwrap(); + w.write(&batch).unwrap(); + w.close().unwrap(); + let buf = Bytes::from(buf); + let meta = + ArrowReaderMetadata::load(&buf, reader_options(PageIndexPolicy::Required)).unwrap(); + (meta, buf) + } + + #[test] + fn window_plan_whole_group_equals_whole_chunks() { + let (meta, _buf) = windowed_fixture(); + let md = meta.metadata(); + let leaves = vec![0usize, 1]; + let (ranges, kib) = window_fetch_plan(md, 0, &leaves, 0, 1000); + let (want_ranges, want_kib) = group_fetch_plan(md.row_group(0), &leaves); + assert_eq!(ranges, want_ranges); + assert_eq!(kib, want_kib); + } + + #[test] + fn window_plan_subwindow_fetches_less_than_the_chunk() { + let (meta, _buf) = windowed_fixture(); + let md = meta.metadata(); + let leaves = vec![0usize, 1]; + let (_, whole_kib) = window_fetch_plan(md, 0, &leaves, 0, 1000); + // A 100-row window out of 1000 (10 pages/column) must fetch strictly + // less than the whole chunks... + let (ranges, kib) = window_fetch_plan(md, 0, &leaves, 400, 100); + assert!(kib < whole_kib, "window kib {kib} >= whole {whole_kib}"); + // ...and every planned range must sit inside one of the column chunks. + for r in &ranges { + let contained = leaves.iter().any(|&l| { + let (s, len) = md.row_group(0).column(l).byte_range(); + r.start >= s && r.end <= s + len + }); + assert!(contained, "range {r:?} escapes the column chunks"); + } + } + + /// The load-bearing guarantee: decode served ONLY from a window's planned + /// ranges must succeed (a request outside the plan is a hard + /// "not prefetched" error) and reproduce exactly the window's rows — for + /// windows that tile the group at non-page-aligned offsets. + #[test] + fn window_plans_serve_every_decoder_request() { + use arrow::array::Int64Array; + + let (meta, buf) = windowed_fixture(); + let md = meta.metadata(); + let leaves = vec![0usize, 1]; + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap(); + let sem = Arc::new(Semaphore::new(usize::MAX >> 3)); + let mut next_val = 0i64; + for (w, wlen) in [(0usize, 250usize), (250, 250), (500, 400), (900, 100)] { + let (ranges, _kib) = window_fetch_plan(md, 0, &leaves, w, wlen); + let data: Vec = ranges + .iter() + .map(|r| buf.slice(r.start as usize..r.end as usize)) + .collect(); + let permit = rt + .block_on(sem.clone().acquire_many_owned(1)) + .unwrap(); + let reader = PrefetchedReader { + ranges, + data, + meta: Arc::clone(meta.metadata()), + _permit: permit, + }; + let batches: Vec = rt.block_on(async { + let mut stream = + ParquetRecordBatchStreamBuilder::new_with_metadata(reader, meta.clone()) + .with_row_groups(vec![0]) + .with_batch_size(97) + .with_projection(ProjectionMask::all()) + .with_row_selection(RowSelection::from(vec![ + RowSelector::skip(w), + RowSelector::select(wlen), + ])) + .build() + .unwrap(); + let mut out = Vec::new(); + while let Some(b) = stream.next().await { + out.push(b.unwrap()); + } + out + }); + let rows: usize = batches.iter().map(|b| b.num_rows()).sum(); + assert_eq!(rows, wlen, "window ({w},{wlen}) yielded {rows} rows"); + for b in &batches { + let col = b.column(0).as_any().downcast_ref::().unwrap(); + for i in 0..col.len() { + assert_eq!(col.value(i), next_val); + next_val += 1; + } + } + } + assert_eq!(next_val, 1000); + } + + #[test] + fn plan_chooses_windows_for_narrow_and_hstack_for_wide() { + let (meta, _buf) = windowed_fixture(); + let roots = vec![0usize, 1]; + let mask = ProjectionMask::all(); + // Generous column budget -> not wide -> row windows (single window here: + // the fixture is tiny, so the byte-budget window covers all rows). + let (plans, units) = plan_s3_units( + &meta, &mask, &roots, &[(0, 0, 1000)], 131072, 2 << 20, 16, 1 << 30, + ); + assert_eq!(plans.len(), 1); + assert!(matches!(plans[0].decode, RgDecode::Windows(1))); + assert_eq!(units[0].sel, Some((0, 1000))); + // 1-byte column budget -> every root its own group -> hstack of 2. + let (plans, units) = plan_s3_units( + &meta, &mask, &roots, &[(0, 0, 1000)], 131072, 2 << 20, 16, 1, + ); + assert!(matches!(plans[0].decode, RgDecode::Hstack(2))); + assert_eq!(units.len(), 2); + assert!(units.iter().all(|u| u.sel.is_none() && u.kib > 0)); + // A K-split style partial sub-range must NEVER column-window (it is a + // tall group split by rows), even under a tiny budget. + let (plans, units) = plan_s3_units( + &meta, &mask, &roots, &[(0, 500, 500)], 131072, 2 << 20, 16, 1, + ); + assert!(matches!(plans[0].decode, RgDecode::Windows(_))); + assert_eq!(units[0].sel, Some((500, 500))); + } + #[test] fn unsigned_and_nonint_logical_types_are_not_comparable() { // Unsigned: a u32 max is stored as the i32 bit pattern -1, so reading diff --git a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py index 590965e70663..89e0c230b876 100644 --- a/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/arrow_rs_parquet_file_reader.py @@ -20,20 +20,20 @@ - ``read_row_groups(path, row_groups, columns, batch_size, ...)`` — local files. - ``read_row_groups_s3(bucket, key, region, anonymous, ...creds..., row_groups, columns, batch_size, decode_budget_bytes, fetch_window_mb, k, - split_threshold_bytes, prefetch_windows, predicate_json, column_fetch_mb, - column_prefetch_budget_mb)`` — S3 - via the Rust ``object_store`` crate, using a **windowed** fetch (only - ``fetch_window_mb`` of compressed bytes in flight per stream) so S3 peak RSS is a - knob, not a property of the row-group size. ``prefetch_windows`` pipelines - consecutive windows (issue window N+1's GET while window N decodes) to hide S3 - latency without staging the whole row group. ``column_fetch_mb`` is the row axis's - dual for **wide** schemas: it reads a wide row group's columns in sequential groups - so only ``≈column_fetch_mb`` of compressed column chunks are resident at once, - instead of arrow-rs's default whole-row-group column fetch. + split_threshold_bytes, predicate_json, column_fetch_mb, prefetch_budget_mb)`` + — S3 via the Rust ``object_store`` crate. Every read decomposes into + prefetchable *units* — row windows of ``≈fetch_window_mb`` compressed bytes + for ordinary row groups, column groups of ``≈column_fetch_mb`` for wide ones — + and all units flow through one byte-budget prefetcher: concurrent ranged GETs + are admitted until ``prefetch_budget_mb`` compressed bytes are in flight ahead + of the (single, in-order) decoder, so S3 peak RSS is a knob, not a property of + the file layout, and S3 latency hides behind decode without staging whole row + groups. All of the crate's performance knobs (decode budget, K-split, fetch window, -prefetch depth) are settable per read through ``dataset_kwargs`` under an -``arrow_rs_`` prefix — see the "Tuning knobs" section below the imports. +column window, prefetch budget) are settable per read through +``dataset_kwargs`` under an ``arrow_rs_`` prefix — see the "Tuning knobs" +section below the imports. Byte-budgeted decode (no reader-side accumulation) -------------------------------------------------- @@ -234,21 +234,6 @@ # local reads. _ARROW_RS_FETCH_WINDOW_MB = env_integer("RAY_DATA_ARROW_RS_FETCH_WINDOW_MB", 16) -# Knob ``arrow_rs_prefetch_windows`` — crate arg ``prefetch_windows``. -# S3 window prefetch depth: how many consecutive fetch windows the native reader -# keeps in flight per stream. With depth 2 the GET for window N+1 is issued while -# window N decodes, so S3 first-byte latency is hidden behind decode instead of -# paid serially between windows — the memory-bounded analog of pyarrow's -# whole-fragment pre_buffer (peak stays `≈ prefetch_windows * fetch_window_mb` -# compressed in flight, not the whole row group). 1 = strictly serial windows -# (no prefetch). Only affects the S3 path (local reads have no fetch latency to -# hide); reserved for and swept on the Linux/S3 run (Agents.md §7.1). -# Tuning: 2 already overlaps fetch with decode; depth >2 only helps when a -# single window decodes faster than it fetches (very high-latency stores) and -# multiplies the compressed bytes held in flight. Drop to 1 to minimize -# memory at the cost of exposing S3 latency between windows. -_ARROW_RS_PREFETCH_WINDOWS = env_integer("RAY_DATA_ARROW_RS_PREFETCH_WINDOWS", 2) - # Knob ``arrow_rs_column_fetch_mb`` — crate arg ``column_fetch_mb``. # S3 column-fetch budget (MiB of *compressed* bytes per column group). This is the # memory knob for WIDE schemas. arrow-rs's async reader fetches every projected @@ -272,24 +257,24 @@ # or set 0 to disable (fetch the whole row group at once -- the pre-fix behavior). _ARROW_RS_COLUMN_FETCH_MB = env_integer("RAY_DATA_ARROW_RS_COLUMN_FETCH_MB", 16) -# Knob ``arrow_rs_column_prefetch_budget_mb`` — crate arg ``column_prefetch_budget_mb``. -# Compressed bytes the column-windowing path may prefetch AHEAD of its (single) -# decoder — the "bucket" it tries to keep full. DERIVED by default: 4 × -# ``column_fetch_mb``, i.e. a bucket of four column-group batches, so tuning the -# one batch-size knob scales the bucket with it and there is nothing separate to -# tune. Column groups are fetched concurrently, gated by a byte-denominated -# semaphore: each in-order fetch acquires permits equal to its compressed size and -# releases them when the decoder finishes (drops) that group — so fetch concurrency -# self-adjusts to the fetch:decode speed ratio (a slow network gets ~4 parallel -# GETs; a slow decoder backpressures fetching to a halt) and peak prefetch memory -# is the bucket size by construction, never an estimate. Decode itself stays -# one-group-at-a-time (that bound is the wide-schema memory fix; see -# ``column_fetch_mb``). Explicitly setting this overrides the 4× derivation -# (benchmark escape hatch); 0 = strictly sequential fetch->decode->fetch. -# ``-1`` sentinel = unset -> derive. -_ARROW_RS_COLUMN_PREFETCH_BUDGET_MB = env_integer( - "RAY_DATA_ARROW_RS_COLUMN_PREFETCH_BUDGET_MB", -1 -) +# Knob ``arrow_rs_prefetch_budget_mb`` — crate arg ``prefetch_budget_mb``. +# Compressed bytes the S3 path may prefetch AHEAD of its (single) decoder — the +# "bucket" it tries to keep full. ONE mechanism for every unit kind (row +# windows and column groups alike). DERIVED by default: 4 × the larger unit-size +# knob (``max(fetch_window_mb, column_fetch_mb)``), i.e. a bucket of about four +# units, so tuning a unit-size knob scales the bucket with it and there is +# nothing separate to tune. Units are fetched concurrently, gated by a +# byte-denominated semaphore: each in-order fetch acquires permits equal to its +# compressed size (exact, from the footer) and releases them when the decoder +# finishes (drops) that unit — so fetch concurrency self-adjusts to the +# fetch:decode speed ratio (a slow network gets ~4 parallel GETs; a slow decoder +# backpressures fetching to a halt) and peak prefetch memory is the bucket size +# by construction, never an estimate. Decode itself stays one-unit-at-a-time +# (bounds decode scratch; see ``column_fetch_mb`` for why that matters on wide +# schemas). Explicitly setting this overrides the 4× derivation (benchmark +# escape hatch); 0 = strictly sequential fetch->decode->fetch. ``-1`` sentinel = +# unset -> derive. +_ARROW_RS_PREFETCH_BUDGET_MB = env_integer("RAY_DATA_ARROW_RS_PREFETCH_BUDGET_MB", -1) # Parquet-format kwargs (``pds.ParquetFileFormat``) that tune PyArrow's I/O # strategy only — they cannot change decoded bytes, so the native path (which @@ -346,10 +331,9 @@ class _ArrowRsTuning(NamedTuple): k: int split_threshold_bytes: Optional[int] fetch_window_mb: int - prefetch_windows: int column_fetch_mb: int - # None means "derive at the call site": 4 x column_fetch_mb. - column_prefetch_budget_mb: Optional[int] + # None means "derive at the call site": 4 x max(fetch_window_mb, column_fetch_mb). + prefetch_budget_mb: Optional[int] # There is deliberately NO per-type support gate: every type Parquet can store @@ -1168,17 +1152,14 @@ def resolve(key: str, default: int, minimum: int) -> int: fetch_window_mb=resolve( "arrow_rs_fetch_window_mb", _ARROW_RS_FETCH_WINDOW_MB, 0 ), - prefetch_windows=resolve( - "arrow_rs_prefetch_windows", _ARROW_RS_PREFETCH_WINDOWS, 1 - ), column_fetch_mb=resolve( "arrow_rs_column_fetch_mb", _ARROW_RS_COLUMN_FETCH_MB, 0 ), - column_prefetch_budget_mb=resolve_optional( - "arrow_rs_column_prefetch_budget_mb", + prefetch_budget_mb=resolve_optional( + "arrow_rs_prefetch_budget_mb", None - if _ARROW_RS_COLUMN_PREFETCH_BUDGET_MB < 0 - else _ARROW_RS_COLUMN_PREFETCH_BUDGET_MB, + if _ARROW_RS_PREFETCH_BUDGET_MB < 0 + else _ARROW_RS_PREFETCH_BUDGET_MB, 0, ), ) @@ -1648,16 +1629,17 @@ def _iter_native_tables( fetch_window_mb=tuning.fetch_window_mb, k=tuning.k, split_threshold_bytes=split_threshold, - prefetch_windows=tuning.prefetch_windows, predicate_json=predicate_json, column_fetch_mb=tuning.column_fetch_mb, - # The prefetch bucket defaults to 4 column-group batches: one - # decoding + ~3 in flight keeps the (single) decoder fed across - # fetch:decode ratios without a second knob to tune. - column_prefetch_budget_mb=( - tuning.column_prefetch_budget_mb - if tuning.column_prefetch_budget_mb is not None - else 4 * tuning.column_fetch_mb + # The prefetch bucket defaults to ~4 units: one decoding + ~3 in + # flight keeps the (single) decoder fed across fetch:decode + # ratios without a second knob to tune. Units are row windows + # (fetch_window_mb) or column groups (column_fetch_mb), so the + # bucket scales with the larger unit-size knob. + prefetch_budget_mb=( + tuning.prefetch_budget_mb + if tuning.prefetch_budget_mb is not None + else 4 * max(tuning.fetch_window_mb, tuning.column_fetch_mb) ), ) else: diff --git a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py index 4c0ea3e79aa6..ebf307a12468 100644 --- a/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py +++ b/python/ray/data/_internal/datasource_v2/readers/parquet_file_reader.py @@ -53,9 +53,8 @@ "arrow_rs_k", "arrow_rs_split_threshold_bytes", "arrow_rs_fetch_window_mb", - "arrow_rs_prefetch_windows", "arrow_rs_column_fetch_mb", - "arrow_rs_column_prefetch_budget_mb", + "arrow_rs_prefetch_budget_mb", } ) _ARROW_RS_KWARG_PREFIX = "arrow_rs_" diff --git a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py index ead0584fd179..3f966f0cea4a 100644 --- a/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py +++ b/python/ray/data/tests/datasource/test_arrow_rs_parquet_reader.py @@ -1788,16 +1788,17 @@ def test_arrow_rs_s3_kspilt_windowed_order(s3_fs, s3_path, k): assert got["id"].to_pylist() == list(range(n)) -@pytest.mark.parametrize("prefetch_windows", [1, 2, 4]) -def test_arrow_rs_s3_window_prefetch_order(s3_fs, s3_path, prefetch_windows): - """The window-prefetch pipeline (K=1 single stream, many fetch windows) must - return rows in EXACT file order at every prefetch depth. This is the common S3 - path the knob targets: one row group sliced into many small windows, with up to - ``prefetch_windows`` of them fetching+decoding concurrently. depth=1 is the old - strictly-serial behavior; depth>1 overlaps window N+1's fetch with window N's - decode. A monotone ``id`` makes any window mis-ordering a hard failure, so this - guards that the concurrent look-ahead never lets a later window's rows overtake - an earlier one's. +@pytest.mark.parametrize("prefetch_budget_mb", [0, 1, 64]) +def test_arrow_rs_s3_window_prefetch_order(s3_fs, s3_path, prefetch_budget_mb): + """The budget-gated prefetch pipeline (K=1 single stream, many row-window + units) must return rows in EXACT file order at every bucket size. This is + the common S3 path: one row group sliced into many small windows, fetched + concurrently under the byte-budget semaphore while a single decoder drains + them in order. budget=0 is strictly-serial fetch→decode→fetch; a budget + smaller than one window still admits that window alone (clamped); a large + budget lets many window fetches run concurrently. A monotone ``id`` makes + any window mis-ordering a hard failure, so this guards that concurrent + fetches never let a later window's rows overtake an earlier one's. """ from ray.data._internal.datasource_v2.readers.arrow_rs_parquet_file_reader import ( _s3_config, @@ -1827,7 +1828,7 @@ def test_arrow_rs_s3_window_prefetch_order(s3_fs, s3_path, prefetch_windows): batch_size=4096, fetch_window_mb=1, # force many sub-windows within the single stream k=1, # single stream: isolate the prefetch pipeline from K-split - prefetch_windows=prefetch_windows, + prefetch_budget_mb=prefetch_budget_mb, ) got = pa.RecordBatchReader.from_stream(stream).read_all() assert got.num_rows == n From 70c3ab1f0977a6465fd0b4be0ea2e5127f6548c0 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Tue, 4 Aug 2026 14:36:57 -0700 Subject: [PATCH 045/135] [Data] Surface per-task max USS/RSS in op metrics and release benchmarks Release tests currently report only total wall time and aggregate object-store peak, which cannot attribute a memory change to the read operator or see per-worker decode memory. This adds: - MemoryProfiler: track max RSS alongside the existing max-USS estimate (same poll; memory_info() returns both). RSS counts shared pages (e.g. mapped object-store blocks) that USS excludes, so the pair separates a task's private working set from its OS-visible footprint. - TaskExecWorkerStats.max_rss_bytes, populated by MapOperator next to max_uss_bytes. - OpRuntimeMetrics: max_rss_bytes DistributionTracker plus max_uss_per_task / average_max_rss_per_task / max_rss_per_task metric properties (worst-task values, since the average can hide one task decoding an outlier file). - benchmark.py collect_operator_metrics(): per-operator wall time, output bytes/rows, and avg/max USS/RSS per task merged into the release result JSON, with read_* top-level conveniences; wired into the wide_schema and read_from_uris benchmarks. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Aarrya --- .../interfaces/op_runtime_metrics.py | 42 +++++++++++++++++ .../execution/operators/map_operator.py | 1 + python/ray/data/_internal/util.py | 47 +++++++++++++++---- python/ray/data/block.py | 6 +++ python/ray/data/tests/test_stats.py | 30 ++++++++++-- release/nightly_tests/dataset/benchmark.py | 43 +++++++++++------ .../dataset/read_from_uris_benchmark.py | 7 ++- .../dataset/wide_schema_pipeline_benchmark.py | 6 ++- 8 files changed, 152 insertions(+), 30 deletions(-) diff --git a/python/ray/data/_internal/execution/interfaces/op_runtime_metrics.py b/python/ray/data/_internal/execution/interfaces/op_runtime_metrics.py index 54609f4be62d..12c17975b071 100644 --- a/python/ray/data/_internal/execution/interfaces/op_runtime_metrics.py +++ b/python/ray/data/_internal/execution/interfaces/op_runtime_metrics.py @@ -576,6 +576,7 @@ def __init__(self, op: "PhysicalOperator"): self.block_size_rows = RuntimeMetricsHistogram(histogram_bucket_rows) self._op_task_duration_stats = DistributionTracker() self._max_uss_bytes = DistributionTracker() + self._max_rss_bytes = DistributionTracker() @property def extra_metrics(self) -> Dict[str, Any]: @@ -914,6 +915,44 @@ def average_max_uss_per_task(self) -> Optional[float]: return None return self.max_uss_bytes.mean + @metric_property( + description="Max USS usage across tasks (worst task).", + metrics_group=MetricsGroup.TASKS, + ) + def max_uss_per_task(self) -> Optional[float]: + """Peak USS of the single worst task — the number a per-worker memory + budget must survive (the average can hide one task decoding an outlier + file).""" + return self.max_uss_bytes.max + + @metric_property( + description="Distribution of max RSS bytes across tasks.", + metrics_group=MetricsGroup.TASKS, + metrics_type=MetricsType.Unsupported, + ) + def max_rss_bytes(self) -> DistributionTracker: + return self._max_rss_bytes + + @metric_property( + description="Average RSS usage of tasks.", + metrics_group=MetricsGroup.TASKS, + ) + def average_max_rss_per_task(self) -> Optional[float]: + """Average max RSS usage of tasks. RSS counts the shared pages + (e.g. mapped object-store blocks) that USS excludes, so USS vs RSS + separates a task's private working set from its OS-visible footprint.""" + if self.max_rss_bytes.num_samples == 0: + return None + return self.max_rss_bytes.mean + + @metric_property( + description="Max RSS usage across tasks (worst task).", + metrics_group=MetricsGroup.TASKS, + ) + def max_rss_per_task(self) -> Optional[float]: + """Peak RSS of the single worst task.""" + return self.max_rss_bytes.max + @metric_property( description="Indicates if the operator is hanging.", metrics_group=MetricsGroup.MISC, @@ -1165,6 +1204,9 @@ def on_task_finished( if task_exec_stats is not None and task_exec_stats.max_uss_bytes is not None: self._max_uss_bytes.add_sample(task_exec_stats.max_uss_bytes) + if task_exec_stats is not None and task_exec_stats.max_rss_bytes is not None: + self._max_rss_bytes.add_sample(task_exec_stats.max_rss_bytes) + task_output_backpressure_s = ( task_exec_driver_stats.task_output_backpressure_s if task_exec_driver_stats diff --git a/python/ray/data/_internal/execution/operators/map_operator.py b/python/ray/data/_internal/execution/operators/map_operator.py index 5a72596d3af2..ddaddf3dbc41 100644 --- a/python/ray/data/_internal/execution/operators/map_operator.py +++ b/python/ray/data/_internal/execution/operators/map_operator.py @@ -886,6 +886,7 @@ def build_metadata(block_ser_time_s): task_exec_stats=TaskExecWorkerStats( task_wall_time_s=task_dur_s, max_uss_bytes=profiler.estimate_max_uss(), + max_rss_bytes=profiler.max_rss(), # Reported by producing transforms through the # per-task reporter; empty if the op reports nothing. custom_op_stats=op_stats_reporter.get_stats(), diff --git a/python/ray/data/_internal/util.py b/python/ray/data/_internal/util.py index a916427eca62..9b7945277848 100644 --- a/python/ray/data/_internal/util.py +++ b/python/ray/data/_internal/util.py @@ -1719,6 +1719,10 @@ def __init__(self, poll_interval_s: Optional[float]): self._process = psutil.Process(os.getpid()) self._max_uss = None + # Peak RSS, sampled by the same poll (memory_info() returns both). RSS + # counts shared pages (e.g. mapped plasma blocks) that USS excludes, so + # the pair distinguishes private decode memory from OS-visible footprint. + self._max_rss = None self._max_uss_lock = threading.Lock() self._uss_poll_thread = None @@ -1752,17 +1756,31 @@ def estimate_max_uss(self) -> Optional[int]: return None with self._max_uss_lock: - if self._max_uss is None: - self._max_uss = self._estimate_uss() - else: - self._max_uss = max(self._max_uss, self._estimate_uss()) + self._sample() assert self._max_uss is not None return self._max_uss + def max_rss(self) -> Optional[int]: + """Get the max RSS of the current process observed by the poll. + + Sampled by the same poll as :meth:`estimate_max_uss` (Linux-only, like + USS, so the two metrics always appear together). Returns ``None`` when + unavailable. + """ + if not self._can_estimate_uss(): + assert self._max_rss is None + return None + + with self._max_uss_lock: + self._sample() + + return self._max_rss + def reset(self): with self._max_uss_lock: self._max_uss = None + self._max_rss = None def _start_uss_poll_thread(self) -> Tuple[threading.Thread, threading.Event]: assert self._poll_interval_s is not None @@ -1773,10 +1791,7 @@ def _start_uss_poll_thread(self) -> Tuple[threading.Thread, threading.Event]: def poll_uss(): while not stop_event.is_set(): with self._max_uss_lock: - if self._max_uss is None: - self._max_uss = self._estimate_uss() - else: - self._max_uss = max(self._max_uss, self._estimate_uss()) + self._sample() stop_event.wait(self._poll_interval_s) thread = threading.Thread(target=poll_uss, daemon=True) @@ -1789,13 +1804,25 @@ def _stop_uss_poll_thread(self): self._stop_uss_poll_event.set() self._uss_poll_thread.join() - def _estimate_uss(self) -> int: + def _sample(self): + """Take one memory sample and fold it into the running maxima. + + Caller must hold ``self._max_uss_lock``. + """ assert self._can_estimate_uss() memory_info = self._process.memory_info() # Estimate the USS (the amount of memory that'd be free if we killed the # process right now) as the difference between the RSS (total physical memory) # and amount of shared physical memory. - return memory_info.rss - memory_info.shared + uss = memory_info.rss - memory_info.shared + if self._max_uss is None: + self._max_uss = uss + else: + self._max_uss = max(self._max_uss, uss) + if self._max_rss is None: + self._max_rss = memory_info.rss + else: + self._max_rss = max(self._max_rss, memory_info.rss) @staticmethod @functools.cache diff --git a/python/ray/data/block.py b/python/ray/data/block.py index 02f8d42d3fa2..cef7f43378a7 100644 --- a/python/ray/data/block.py +++ b/python/ray/data/block.py @@ -216,6 +216,12 @@ class TaskExecWorkerStats: # or None if USS measurement is unavailable (e.g., non-Linux platforms). max_uss_bytes: Optional[int] = None + # Peak RSS (Resident Set Size) memory in bytes observed during the task, + # sampled by the same poll as ``max_uss_bytes`` (None off-Linux likewise). + # RSS counts shared pages (e.g. mapped object-store blocks) that USS + # excludes, so the pair separates private working set from OS footprint. + max_rss_bytes: Optional[int] = None + # Operator-specific worker-reported stats: one CustomOpStats entry per # reporting transform (fused transforms each contribute one). Empty for # operators that do not report any extra stats. diff --git a/python/ray/data/tests/test_stats.py b/python/ray/data/tests/test_stats.py index ccc738d47e85..0964dad3d946 100644 --- a/python/ray/data/tests/test_stats.py +++ b/python/ray/data/tests/test_stats.py @@ -354,6 +354,10 @@ def gen_expected_metrics( "'op_task_duration_stats': {'num_samples': N, 'mean': N, 'variance': N, 'min': N, 'max': N, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P}", "'max_uss_bytes': H", "'average_max_uss_per_task': H", + "'max_uss_per_task': H", + "'max_rss_bytes': H", + "'average_max_rss_per_task': H", + "'max_rss_per_task': H", "'num_inputs_received': N", "'num_row_inputs_received': N", "'bytes_inputs_received': N", @@ -444,6 +448,10 @@ def gen_expected_metrics( "'op_task_duration_stats': {'num_samples': Z, 'mean': Z, 'variance': Z, 'min': None, 'max': None, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P}", "'max_uss_bytes': H", "'average_max_uss_per_task': H", + "'max_uss_per_task': H", + "'max_rss_bytes': H", + "'average_max_rss_per_task': H", + "'max_rss_per_task': H", "'num_inputs_received': N", "'num_row_inputs_received': N", "'bytes_inputs_received': N", @@ -634,7 +642,8 @@ def canonicalize( canonicalized_stats = re.sub("\t", " ", canonicalized_stats) canonicalized_stats = re.sub( - r"(average_max_uss_per_task:|'average_max_uss_per_task':) (?:N|Z|None)\b", + r"((?:average_)?max_[ur]ss_per_task:|'(?:average_)?max_[ur]ss_per_task':)" + r" (?:N|Z|None)\b", r"\g<1> H", canonicalized_stats, ) @@ -645,10 +654,11 @@ def canonicalize( r"\g<1>P", canonicalized_stats, ) - # max_uss_bytes DistributionTracker may have 0 or N samples depending on - # platform (USS measurement only available on Linux). Normalize entire dict. + # max_uss_bytes/max_rss_bytes DistributionTrackers may have 0 or N samples + # depending on platform (USS/RSS measurement only available on Linux). + # Normalize entire dict. canonicalized_stats = re.sub( - r"(max_uss_bytes['\s:]+)\{[^}]+\}", + r"(max_[ur]ss_bytes['\s:]+)\{[^}]+\}", r"\g<1>H", canonicalized_stats, ) @@ -931,6 +941,10 @@ def test_dataset__repr__(ray_start_regular_shared, restore_data_context): " op_task_duration_stats: {'num_samples': N, 'mean': N, 'variance': N, 'min': N, 'max': N, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P},\n" " max_uss_bytes: H,\n" " average_max_uss_per_task: H,\n" + " max_uss_per_task: H,\n" + " max_rss_bytes: H,\n" + " average_max_rss_per_task: H,\n" + " max_rss_per_task: H,\n" " num_inputs_received: N,\n" " num_row_inputs_received: N,\n" " bytes_inputs_received: N,\n" @@ -1096,6 +1110,10 @@ def check_stats(): " op_task_duration_stats: {'num_samples': N, 'mean': N, 'variance': N, 'min': N, 'max': N, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P},\n" " max_uss_bytes: H,\n" " average_max_uss_per_task: H,\n" + " max_uss_per_task: H,\n" + " max_rss_bytes: H,\n" + " average_max_rss_per_task: H,\n" + " max_rss_per_task: H,\n" " num_inputs_received: N,\n" " num_row_inputs_received: N,\n" " bytes_inputs_received: N,\n" @@ -1214,6 +1232,10 @@ def check_stats(): " op_task_duration_stats: {'num_samples': N, 'mean': N, 'variance': N, 'min': N, 'max': N, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P, 'pN': P},\n" " max_uss_bytes: H,\n" " average_max_uss_per_task: H,\n" + " max_uss_per_task: H,\n" + " max_rss_bytes: H,\n" + " average_max_rss_per_task: H,\n" + " max_rss_per_task: H,\n" " num_inputs_received: N,\n" " num_row_inputs_received: N,\n" " bytes_inputs_received: N,\n" diff --git a/release/nightly_tests/dataset/benchmark.py b/release/nightly_tests/dataset/benchmark.py index 2336eb672534..f0282d9768e6 100644 --- a/release/nightly_tests/dataset/benchmark.py +++ b/release/nightly_tests/dataset/benchmark.py @@ -121,29 +121,45 @@ def collect_dataset_stats(ds: "ray.data.Dataset") -> Dict[str, Any]: def collect_operator_metrics(ds: "ray.data.Dataset") -> Dict[str, Any]: - """Per-operator time / output-bytes / decode-USS, for merging into a result dict. + """Per-operator time / output-bytes / worker-memory, for merging into a result dict. Surfaces numbers that otherwise live only on the Prometheus dashboard, not in the - release log or databricks: each operator's wall time, output size/rows, and - ``average_max_uss_per_task`` (per-task peak USS from ``MemoryProfiler``; Linux-only, - ``None`` on macOS). This isolates the read operator's cost from downstream compute - and exposes the decode-memory metric that the aggregate object-store peak cannot - see. Best-effort: returns a partial/empty dict rather than failing the benchmark. - - A ``read_*`` top-level convenience is filled from the first ``Read*`` operator so the - "parquet part" (read wall time + output bytes + decode USS) is a first-class field. + release log or databricks: each operator's wall time, output size/rows, and its + per-task peak worker memory — USS (private working set) and RSS (OS-visible + footprint, includes mapped object-store pages), both as the average across tasks + and the single worst task. All four come from ``MemoryProfiler`` sampling inside + the task (Linux-only; ``None`` on macOS). This isolates the read operator's cost + from downstream compute and exposes the decode-memory metrics that the aggregate + object-store peak cannot see. Best-effort: returns a partial/empty dict rather + than failing the benchmark. + + A ``read_*`` top-level convenience is filled from the first ``Read*`` operator so + the "parquet part" (read wall time + output bytes + decode USS/RSS) is a + first-class field. + + NOTE: stats attach to the consumed dataset handle. Consume ``ds`` itself + (``iter_*``/``write_*``/``materialize``) before calling this; ``ds.count()`` + executes a *copy* of the plan and leaves ``ds`` without stats. """ from ray.data._internal.stats import DatasetStatsSummary def _sum(stat) -> Any: return stat.sum if stat is not None else None + # (result-dict key, extra_metrics key) for the per-task memory metrics. + mem_keys = [ + ("avg_max_uss_per_task_bytes", "average_max_uss_per_task"), + ("max_uss_per_task_bytes", "max_uss_per_task"), + ("avg_max_rss_per_task_bytes", "average_max_rss_per_task"), + ("max_rss_per_task_bytes", "max_rss_per_task"), + ] + out: Dict[str, Any] = {"operators_detail": []} try: summary = ds.get_stats_summary(detail=True) for node in DatasetStatsSummary._collect_dataset_stats_summaries(summary): extra = getattr(node, "extra_metrics", {}) or {} - uss = extra.get("average_max_uss_per_task") + mem = {out_key: extra.get(in_key) for out_key, in_key in mem_keys} for op in node.operators_stats or []: out["operators_detail"].append( { @@ -153,7 +169,7 @@ def _sum(stat) -> Any: "udf_time_s": _sum(op.udf_time), "output_num_rows": _sum(op.output_num_rows), "output_size_bytes": _sum(op.output_size_bytes), - "avg_max_uss_per_task_bytes": uss, + **mem, } ) for entry in out["operators_detail"]: @@ -161,9 +177,8 @@ def _sum(stat) -> Any: out["read_operator_name"] = entry["operator_name"] out["read_wall_time_s"] = entry["wall_time_s"] out["read_output_size_bytes"] = entry["output_size_bytes"] - out["read_avg_max_uss_per_task_bytes"] = entry[ - "avg_max_uss_per_task_bytes" - ] + for out_key, _ in mem_keys: + out[f"read_{out_key}"] = entry[out_key] break except Exception: logger.warning("collect_operator_metrics failed", exc_info=True) diff --git a/release/nightly_tests/dataset/read_from_uris_benchmark.py b/release/nightly_tests/dataset/read_from_uris_benchmark.py index eed591aaf502..d1892728eb24 100644 --- a/release/nightly_tests/dataset/read_from_uris_benchmark.py +++ b/release/nightly_tests/dataset/read_from_uris_benchmark.py @@ -7,7 +7,7 @@ import ray from ray.data.expressions import download -from benchmark import Benchmark +from benchmark import Benchmark, collect_operator_metrics BUCKET = "anyscale-imagenet" # This Parquet file contains the keys of images in the 'anyscale-imagenet' bucket. @@ -46,6 +46,11 @@ def convert_key(table): for _ in ds.iter_internal_ref_bundles(): pass + # Per-operator wall time + per-task USS/RSS (avg and worst task): separates + # the tiny metadata.parquet read from the download/decode maps, so a memory + # regression here can be attributed to the right operator. + return collect_operator_metrics(ds) + if __name__ == "__main__": main() diff --git a/release/nightly_tests/dataset/wide_schema_pipeline_benchmark.py b/release/nightly_tests/dataset/wide_schema_pipeline_benchmark.py index 373afb23e55f..79b54c7bb670 100644 --- a/release/nightly_tests/dataset/wide_schema_pipeline_benchmark.py +++ b/release/nightly_tests/dataset/wide_schema_pipeline_benchmark.py @@ -2,7 +2,7 @@ from typing import Dict, Any import ray -from benchmark import Benchmark +from benchmark import Benchmark, collect_operator_metrics def parse_args() -> argparse.Namespace: @@ -45,6 +45,10 @@ def run_pipeline() -> Dict[str, Any]: "num_columns": actual_num_columns, "data_type": args.data_type, "input_path": input_path, + # Read-operator wall time + per-task USS/RSS (avg and worst task): + # isolates the parquet decode from downstream, and surfaces the + # per-worker memory the aggregate object-store peak can't see. + **collect_operator_metrics(ds), } # Run the timed benchmark From 82a97cb21d683ef596706393865e4a76c29a7993 Mon Sep 17 00:00:00 2001 From: Aarrya Date: Fri, 7 Aug 2026 17:15:27 -0700 Subject: [PATCH 046/135] [Data] arrow-rs: fix two reader defaults that measured worse than their alternatives Both from the 2026-08-07 Linux + real-S3 investigation. Neither changes PyArrow's behaviour. 1. Fragment threads 4 -> 1 on the arrow-rs path. Ray decodes RAY_DATA_READ_FILES_NUM_THREADS fragments concurrently per read task (default 4) to hide remote-filesystem latency. That is right for the PyArrow reader, whose per-fragment decode gives a task no parallelism of its own. The arrow-rs path already overlaps fetch with decode inside a single fragment, so the pool adds no throughput and multiplies the working set: transport thr=1 thr=4 saved wall cost local 213 MiB 309 MiB 96 MiB 0.95x s3 837 MiB 880 MiB 44 MiB 0.98x Serial costs 0.95-1.02x wall at every read-task size tried, including tasks holding 49 fragments, so this is not a memory/throughput trade. The PyArrow control moves the other way (it gains 18 MiB from serialising on S3), which is what establishes the cost as the crate's per-in-flight-fragment retention rather than Ray's queueing. Introduces FileReader._num_fragment_read_threads() so the choice is per-reader rather than a module constant. Note it changes the code PATH, not just a worker count: num_workers <= 1 takes the sequential branch and make_async_gen is never constructed -- which is also why the saving is not linear in threads. An explicit env var still wins. 2. decode_budget_bytes 2 MiB -> 32 MiB. The old default came from the standalone benchmark, where the budget looked like a pure floor knob. Inside Ray that inverts. Ratios against PyArrow on write_parquet over S3: budget avg USS max USS wall 2 MiB 1.00x 1.47x 0.99x 32 MiB 0.83x 1.03x 0.87x 128 MiB 0.90x 1.29x 1.28x 32/64/128 agree within 4% on memory, so 32 is a knee, not a sharp optimum. 2 MiB is also below the 2048-row batch floor for any schema wider than ~1 KiB/row, which made the knob inert exactly where memory matters most. Why small batches cost more is NOT established -- the sweep that would show it ran with a write fused onto the read, and the writer was holding 589 MiB. A third candidate default (the S3 fetch window) is deliberately NOT here: reading the crate showed the mechanism I had attributed it to does not exist on the measured layout, so it is back to being an experiment. Tests pin all three behaviours and were checked to fail on revert. The thread test spies on make_async_gen rather than asserting the returned number, because a refactor could keep the number and lose the branch. Signed-off-by: Aarrya --- ...w_rs-0.1.0-cp39-abi3-macosx_11_0_arm64.whl | Bin 0 -> 4504647 bytes .../readers/arrow_rs_parquet_file_reader.py | 113 +++++++++++++-- .../datasource_v2/readers/file_reader.py | 28 +++- .../test_arrow_rs_parquet_reader.py | 134 ++++++++++++++++++ 4 files changed, 263 insertions(+), 12 deletions(-) create mode 100644 python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/dist/ray_data_arrow_rs-0.1.0-cp39-abi3-macosx_11_0_arm64.whl diff --git a/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/dist/ray_data_arrow_rs-0.1.0-cp39-abi3-macosx_11_0_arm64.whl b/python/ray/data/_internal/datasource_v2/native/ray_data_arrow_rs/dist/ray_data_arrow_rs-0.1.0-cp39-abi3-macosx_11_0_arm64.whl new file mode 100644 index 0000000000000000000000000000000000000000..ddb0550d4dcde96d72fdb2c3ba4a3c91ea7107ad GIT binary patch literal 4504647 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

2XEiP)KbqK^713v#$ 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≪#~J8o5op7 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%0DKgH7)%NcEk5*CbxmmGs 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

1OMrA;#BRbX*plW;#XlH(zrrDTFCzr@rM-SUy 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¥4pQSGz_N%(IQxY4XPrX!7jWOp__2q{$aC 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∨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 egQhPV%Hh|*YcX9}IW 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

)93 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

o>O8EP1gJEq1YeVL+{I1=GDD2 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%0AKvukj_Q?Q5Y7-T!}VBA?| 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 a~e!wvpiAD}UaDt>}CE=6k+tN=f6)!Aonq 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̜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 z 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�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�jP}igwTW&ZDwrTT&W@<3 zX7r%rvqp@Ey!hQganqaD3v=CwmOPT$`cb#Tn9QdPN%RbIKTx^%&8qNGTIO19Saqccz{&8TAao(VBz9Wr}=x??w|5gv{7A5;UK?V1{eZ>=GZzZa+ zv-CCV-p4n9j+qkykD+H7wXs2C&WDE#ng`f)eHV7U8gXJ$ajy~=m~%{-oZ*!Xro-MM z=dX6V1`x)#&S__#^VG)^mIf+G#ihWos?Sv2asFD}m_aG8V4ao;_VudduZ}s2(l8;+ z!+^l*`%%KKJuixSnjgIc$)w$J&8&xLT>aj%%Wj8gHJrz&Q>>A6h1Je!d|KJ)FnEmQ z{m&$>{xJ{JD4$=GW7s4|9c$;|M*`*nlkch6+Hv15cz#SyS;0h6tXm632-Ku!bC$!) zC!6(@3ifGV|Jl-wY9{+L;;_bN*fY5WkU3@W75avOX~GqSp#)O@Mx}@&syfJmQ{kaN zI&dK6Y$Xv^a820kq(EOYg}uvMAqWJj+nSm|!D5Q;$rzdBLwH^`-F-FsqF6e8@MSRa z3R6`R1!0g4)|U4ma!Fpu!@sR)Hhpsl`?_m8D&D@wXTfIuWAuD1UwQxSXd4&%-|5pi z?n**cQGxNcy85lZ2Hc(9S{P&{BQ(-);P%wFsYW38_GZ3aBUGmL+k5sX3kFvn${h${ zl^6Eju9Vdq(VB*?bII|UO)*N7KUm@HZrbt4N5l}5rx1GGY|H6>AySXIHrg*INuS*F zs7LHhudn%4YO3FsblTOzV3J5rhHrSJ3n;SnDQbT6#7O$3#{OnsTKeXev}KtlUhM7U;#^j0Lf zB5_wtD5BI_00>RG3cxkD(PW;vd|{Q58CBx**S)$w8CPl&J7h3?)>?}i&Ema%c`o-) zwZ@i+&4e;K8{V9XD>Zr`da!O+SQSCj_&x{Yvv--SHGTAvo~@Ba07M5=$5N>|%vyl; z0n4$ymsZlaS)31|{WYTN6+aSh4CE-($HTe~)hBKhila@(%Xpo%emF@BMrw z;6}A_6&MxAQh;+@uST#^U2otf7Z?Ns*hkO5FkF>~wy( z!x{F_)WkO6rBCF8R^c29fOsDqS2Fdf6>VC6Jia$VA=AT<@~WY{-kE` znfLA5BShtBFO5_CpmtSqf}QwKvjSD1RvIYL5GVzZ#8G+}go8Ot(NhPj_`sSo@&C!n1l~955Te zRSyiKyxaqQorJ{P)kQw-gH8hmvd-*DYqmgQZZ-M`&(4TyQ!wmL)LCg|`EN?dwsxkr!cZCUjK(@OB9< z(+i9pkn|Q#PpOc{{r0g=Ke*Z7XBj9k1(maFI}JaYvnjB z@^;|Ntx7tkDRik8H)1A~E^?6X?b^e^Jd|pB}=whb?D|lSE_=sfD0?*Dg~b0CY9Gt1+atF`_jQyqNM8k zmQ$1bLY$7I(IfpXuObv(1rccof5o7ZmiS{LGuF!Y*f%~rR8x!Sms5G{d*hN9E0q~J zFfD@uQIjmYdInJ_UrFm0@)X6&Th@ z)!*!*-qs}D`B|>K3wNG1MPm7E0(_>I(d5Rc1`J6xoWab=X4hE;bNr}yPH^bj&8vln zklil4v-KgVgy$dL41TTgVDA4nF3jksCn%-LL?ZQwY_W-%HH`Bi6vGM~?<@9UhuQ+}828Ea%{ zkpxgpe6`3pX-6HQQWT=6EO^VG7%Taa`^vbxUNNBu8G<#cqzNY;$qx?>KiJ(O^dN^5 zuZ~$TPPd-KF&q=l4_(Cn;6NhoIu1E!bA^weeSj3O_z43fO<0IYi2&)elf^M{c z=DKwr@|FJARg-R{BSIW&?>^|?YIt(BM4Z*`lad5%bY|D}CB!zc2S8G42`ZM?6`DGt z3{hg)D>0_(YtY8=V-K|67`rS%0AgPy)igYj=AG=npVNKLe)mX5x5f22`#Z-26(S|! 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�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

RH-U_pT#xX&QJ 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�^ZR!Q_v2N z!uvy%w&{X)xD@|CR5`mu&<(mzek&UQ1R8r3+{;%wAMW_O7JMB z=m!~x$v4&-2My=HXB>gUj3Y2l(8!tkliiua>E&Vf&~(C;5~I&$)Wsds0xg zeUEx(n)=+Qoa}xyy6@1wȪ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


ljnq? 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 z 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�KjhgTV+sM;_86R-SHRgWtt_Oc1ovH0Z~>qK_Ch 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

_u3__@vE-c4EB84nEaXHy|7>BKJpzR{iBG! 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

J?9ly&VqAoGhq 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%0AU~JLz8@dAlIjpU7?L_H)Sl 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'JC|_n~W*D5*BUEOoqNA3Q3N9AHO?Heda!r6gjk` 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%0D12du%Lv<=)( z*pC9q#tx!pF-A5ZORy2LQAt_-dhWP+17($z+hje9$oQo|%_J)R=f1);$mA)vkuGG? zuAIh6YNQOnX_%<^`_75l*$T^kR!7wAl#SG>e^$XXM~A@Yqcm-RuUGz9O2!<{Dxo!y z4WM)X4z3eu&CM|sm<9Wbn*y`0qBYqP1!hg9HI=ax0NxyE3hF>U`xD56;iBpIz07Up zPlZef`&dD$T)ZGt-nu%cZQC+I2ukBfU1iRKui&9;Ed04OGQNfU?=I_Iyq7aa-UDp! zS)*u8EApRDpfxoyu*oWiVCO