diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index f391abfea2..76bb041195 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -690,7 +690,9 @@ def _(obj: pa.StructType, visitor: PyArrowSchemaVisitor[T]) -> T: @visit_pyarrow.register(pa.ListType) -def _(obj: pa.ListType, visitor: PyArrowSchemaVisitor[T]) -> T: +@visit_pyarrow.register(pa.FixedSizeListType) +@visit_pyarrow.register(pa.LargeListType) +def _(obj: Union[pa.ListType, pa.LargeListType, pa.FixedSizeListType], visitor: PyArrowSchemaVisitor[T]) -> T: visitor.before_list_element(obj.value_field) result = visit_pyarrow(obj.value_type, visitor) visitor.after_list_element(obj.value_field) diff --git a/tests/io/test_pyarrow_visitor.py b/tests/io/test_pyarrow_visitor.py index 7d35cae424..5b55bd61b6 100644 --- a/tests/io/test_pyarrow_visitor.py +++ b/tests/io/test_pyarrow_visitor.py @@ -245,6 +245,26 @@ def test_pyarrow_list_to_iceberg() -> None: assert visit_pyarrow(pyarrow_list, _ConvertToIceberg()) == expected +def test_pyarrow_large_list_to_iceberg() -> None: + pyarrow_list = pa.large_list(pa.field("element", pa.int32(), nullable=False, metadata={"PARQUET:field_id": "1"})) + expected = ListType( + element_id=1, + element_type=IntegerType(), + element_required=True, + ) + assert visit_pyarrow(pyarrow_list, _ConvertToIceberg()) == expected + + +def test_pyarrow_fixed_size_list_to_iceberg() -> None: + pyarrow_list = pa.list_(pa.field("element", pa.int32(), nullable=False, metadata={"PARQUET:field_id": "1"}), 1) + expected = ListType( + element_id=1, + element_type=IntegerType(), + element_required=True, + ) + assert visit_pyarrow(pyarrow_list, _ConvertToIceberg()) == expected + + def test_pyarrow_map_to_iceberg() -> None: pyarrow_map = pa.map_( pa.field("key", pa.int32(), nullable=False, metadata={"PARQUET:field_id": "1"}),