AI & Analytics

Python: grote JSON-bestanden verwerken met ijson

KDnuggets
Python: grote JSON-bestanden verwerken met ijson

Samenvatting

Python met ijson verwerkt grote JSON-bestanden stapsgewijs, zonder het volledige document vooraf in het geheugen te laden.

ijson voor grote JSON-bestanden

KDnuggets beschrijft hoe Python omgaat met een JSON-bestand van 181 MB met gegevens over percelen in San Francisco. Met de ingebouwde functie json.load() leest Python het volledige document in en zet het om naar dictionaries, lijsten, strings en getallen.

In het experiment steeg het geheugengebruik daarbij van 43 MB naar 808 MB. Dat komt doordat de JSON-structuur niet alleen op schijf ruimte inneemt: Python maakt ook objecten aan voor alle inhoud, inclusief geometriecoördinaten die de analyse niet nodig heeft. ijson pakt dit anders aan met een iteratieve parser die onderdelen stapsgewijs verwerkt.

Waarom ijson telt bij JSON-verwerking

De keuze tussen json.load() en ijson hangt af van de omvang van het bestand en de manier waarop je de gegevens gebruikt. Voor kleine JSON-bestanden blijft de standaardmodule praktisch. Bij een grote FeatureCollection kan het onnodig laden van alle records en coördinaten het geheugengebruik sterk verhogen.

Streaming verandert de verwerkingsvolgorde. Je hoeft niet eerst het complete document in Python-objecten om te zetten voordat je relevante velden uit properties kunt selecteren. Dat past bij analyses waarbij slechts enkele waarden nodig zijn, zoals perceelnummer, bloknummer of straatnaam.

Voor BI-werk bestaat daarbij een duidelijke les: bestandsgrootte op schijf zegt niet hoeveel werkgeheugen een Python-proces nodig heeft. De interne structuur van JSON en de gekozen parser bepalen dat mede. ijson vormt in deze context een alternatief voor json.load(), niet een vervanging die voor elk bestand nodig is.

Concrete takeaway voor ijson

Meet het geheugengebruik voordat je grote JSON-bestanden in een pipeline opneemt. Gebruik json.load() voor kleine bestanden, maar test ijson zodra Python alleen geselecteerde velden hoeft te verwerken of een volledige dataset niet tegelijk hoeft te laden.

Lees het volledige artikel
Meer over AI & Analytics →