You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Due to how iceberg-python does checks in certain places, I can't use libraries such as arro3 or polars without having to do a conversion and include pyarrow as a dependency. Here is such a case in table/__init__.py:
defappend(self, df: pa.Table, snapshot_properties: Dict[str, str] =EMPTY_DICT, branch: Optional[str] =MAIN_BRANCH) ->None:
""" Shorthand API for appending a PyArrow table to a table transaction. Args: df: The Arrow dataframe that will be appended to overwrite the table snapshot_properties: Custom properties to be added to the snapshot summary branch: Branch Reference to run the append operation """try:
importpyarrowaspaexceptModuleNotFoundErrorase:
raiseModuleNotFoundError("For writes PyArrow needs to be installed") fromefrompyiceberg.io.pyarrowimport_check_pyarrow_schema_compatible, _dataframe_to_data_filesifnotisinstance(df, pa.Table):
raiseValueError(f"Expected PyArrow table, got: {df}")
pyiceberg is very much coupled with pyarrow right now. Would be good to decouple it and support the Arrow Capsule interface.
I see arro3 has the Table object, whats the best way to abstract the isinstance check so that its not solely dependent on pyarrow?
The point of the PyCapsule Interface is to not have your API be stuck/tied to any one library implementation. So instead of taking in a table: pyarrow.Table, you should take in an ArrowStreamExportable, defined as
So for any input object that advertises an __arrow_c_stream__ method, you can import its data into your internal Arrow implementation of choice using, say, pyarrow.table(input_object)
This issue has been automatically marked as stale because it has been open for 180 days with no activity. It will be closed in next 14 days if no further activity occurs. To permanently prevent this issue from being considered stale, add the label 'not-stale', but commenting on the issue is preferred when possible.
Activity
kevinjqliu commentedon Nov 3, 2025
Thanks for raising this @DisturbedOcean
I believe this is similar to #1655
Please feel free to give it a try
DisturbedOcean commentedon Nov 3, 2025
@kevinjqliu Sorry - what am I supposed to try? The problem is the
isinstancechecks inpyicebergfrom what I can tell.kevinjqliu commentedon Nov 3, 2025
Feel free to submit a PR
pyiceberg is very much coupled with pyarrow right now. Would be good to decouple it and support the Arrow Capsule interface.
I see arro3 has the
Tableobject, whats the best way to abstract the isinstance check so that its not solely dependent on pyarrow?kylebarron commentedon Dec 1, 2025
The point of the PyCapsule Interface is to not have your API be stuck/tied to any one library implementation. So instead of taking in a
table: pyarrow.Table, you should take in anArrowStreamExportable, defined asSo for any input object that advertises an
__arrow_c_stream__method, you can import its data into your internal Arrow implementation of choice using, say,pyarrow.table(input_object)github-actions commentedon May 31, 2026
This issue has been automatically marked as stale because it has been open for 180 days with no activity. It will be closed in next 14 days if no further activity occurs. To permanently prevent this issue from being considered stale, add the label 'not-stale', but commenting on the issue is preferred when possible.