Files
arrow/python/pyarrow
Stefan WangandAlenka Frim f52076ca06 GH-48344: [Python] Fix Table.from_struct_array for empty ChunkedArray (#49869)
### Rationale for this change

Round-tripping an empty table through `to_struct_array()` and
`Table.from_struct_array()` raises
`ValueError: Must pass schema, or at least one RecordBatch`.
`to_struct_array()` returns a zero-chunk struct `ChunkedArray`, so
`from_struct_array()` has no batch from which to recover the schema.

For a zero-chunk input, `from_struct_array()` now calls `combine_chunks()` and
converts the resulting empty struct array into a `RecordBatch`. Nonempty inputs
keep the existing path. An empty non-struct `ChunkedArray` still raises the
expected `TypeError`.

### What changes are included in this PR?

The empty `ChunkedArray` path creates one empty batch before calling
`Table.from_batches`. The regression coverage checks the round-trip result,
schema preservation, and the invalid non-struct input.

### Are these changes tested?

I ran this script against PyArrow 25.0.1 and the compiled branch:

```bash
python - <<'PY'
import pyarrow as pa

value = pa.chunked_array(
    [], type=pa.struct([("ints", pa.int32()), ("floats", pa.float32())])
)
print(f"pyarrow={pa.__version__}, chunks={value.num_chunks}")
try:
    result = pa.Table.from_struct_array(value)
    print(f"rows={result.num_rows}, schema={result.schema}")
except Exception as error:
    print(f"{type(error).__name__}: {error}")
PY
```

Before:

```text
pyarrow=25.0.1, chunks=0
ValueError: Must pass schema, or at least one RecordBatch
```

After:

```text
pyarrow=26.0.0.dev175+ge4ad179ae, chunks=0
rows=0, schema=ints: int32
floats: float
```

The focused regression suite also runs against the compiled branch:

```text
$ python -m pytest python/pyarrow/tests/test_table.py -k from_struct_array -q
.......                                                                  [100%]
7 passed, 208 deselected in 0.51s
```

### Are there any user-facing changes?

`Table.from_struct_array()` now returns the expected empty table for a
zero-chunk struct `ChunkedArray` instead of raising `ValueError`.

* GitHub Issue: https://github.com/apache/arrow/issues/48344

* GitHub Issue: #48344

Lead-authored-by: 1fanwang <1fannnw@gmail.com>
Co-authored-by: Alenka Frim <AlenkaF@users.noreply.github.com>
Signed-off-by: AlenkaF <frim.alenka@gmail.com>
2026-08-28 07:14:37 +02:00
..