in pyiceberg/io/__init__.py [0:0]
def load_file_io(properties: Properties = EMPTY_DICT, location: Optional[str] = None) -> FileIO:
# First look for the py-io-impl property to directly load the class
if io_impl := properties.get(PY_IO_IMPL):
if file_io := _import_file_io(io_impl, properties):
logger.info("Loaded FileIO: %s", io_impl)
return file_io
else:
raise ValueError(f"Could not initialize FileIO: {io_impl}")
# Check the table location
if location:
if file_io := _infer_file_io_from_scheme(location, properties):
return file_io
# Look at the schema of the warehouse
if warehouse_location := properties.get(WAREHOUSE):
if file_io := _infer_file_io_from_scheme(warehouse_location, properties):
return file_io
try:
# Default to PyArrow
logger.info("Defaulting to PyArrow FileIO")
from pyiceberg.io.pyarrow import PyArrowFileIO
return PyArrowFileIO(properties)
except ModuleNotFoundError as e:
raise ModuleNotFoundError(
'Could not load a FileIO, please consider installing one: pip3 install "pyiceberg[pyarrow]", for more options refer to the docs.'
) from e