Fabian Preiß
08/04/2025, 12:33 PMThierry Jean
08/04/2025, 8:27 PM"{name}_data":
type: pandas.CSVDataset
filepath: data/01_raw/{name}_data.csv
## In Hamilton
The materialization and with_materializers() pages are useful references. Personally, I would dynamically define from_.csv(...) data loaders and give them to the Builder().with_materializer() clause.
Some example code
import pathlib
from hamilton.driver import Builder
from hamilton.io.materialization import from_
import my_dataflow
loaders = []
for path in pathlib.Path("./data").iterdir():
if path.is_file() and path.suffix == ".csv":
csv_loader = from_.csv(target=f"{path.name}_data", path=path)
loaders.append(csv_loader)
dr = (
Builder()
.with_modules(my_dataflow)
.with_materializers(*loaders)
.build()
)
# you should see the CSV loader nodes
dr.display_all_functions("dag.png")Thierry Jean
08/04/2025, 8:29 PMdef generate_csv_loaders(data_dir: str) -> list[DataLoader]:
loaders = []
for path in pathlib.Path(data_dir).iterdir():
if path.is_file() and path.suffix == ".csv":
csv_loader = from_.csv(target=f"{path.name}_data", path=path)
loaders.append(csv_loader)
return loadersFabian Preiß
08/05/2025, 8:47 AMdef raw_data(
*, path: Path, file_pattern: str
) -> dict[str, Any]:
files = path.glob(file_pattern)
collection: dict[str, Any] = {}
for file in files:
with open(file, "r") as f:
collection[file.name] = json.load(f)
return collection
I'll have a look into dynamically constructing the DataLoaders, though I'm wondering in how far this approach is going to turn out when dealing with hundred of files.Elijah Ben Izzy
08/07/2025, 4:54 AMElijah Ben Izzy
08/07/2025, 4:54 AMElijah Ben Izzy
08/07/2025, 4:54 AMElijah Ben Izzy
08/07/2025, 4:55 AM