Preserve row counts for zero-column tables in IO readers
- Dominant language
- C++
- Stars
- 9.8k
- Forks
- 1.1k
- Avg merge
- 3d 6m
- Merged PRs (30d)
- 278
Description
Follow-up to the zero-column support #22765.
The core PR made zero-column tables (shape `(N, 0)`) representable and threaded their row counts through table-producing algorithms, interop, and `plc.Table`. The remaining gap is in the IO readers, which still collapse zero-column reads to `(0, 0)` and lose the row count.
## To do
* [ ] Parquet reader (including chunked and filtered read paths)
* [ ] ORC reader (including chunked read paths)
* [ ] CSV reader
* [ ] AVRO, JSON, and experimental Parquet paths (hybrid scan, deletion vectors) where applicable
* [ ] Unskip the placeholder reader tests (`ParquetReaderTest`, `OrcReaderTest`, and `CsvReaderTest.ZeroColumnsPreservesRowCount`)
* [ ] Remove the cudf-polars workarounds: `DataFrame._num_rows_override`, the `DataFrameScan` zero-width path, `Scan._get_parquet_row_count_from_metadata`, and the related xfails in `inject_gpu_engine.py`
Contributor guide
Research direction
Start by locating the ParquetReaderTest, OrcReaderTest, and CsvReaderTest.ZeroColumnsPreservesRowCount placeholders, then trace the Parquet, ORC, CSV, AVRO, JSON, and experimental Parquet reader paths listed in the issue. Done means zero-column reads preserve their row counts across the applicable chunked and filtered paths, all listed tests are unskipped, and the named cudf-polars workarounds and related xfails are removed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, python
- Domain
- data
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100