А чё, у вас на РНР это считается проблемой? Pandas такие объёмы переваривает вообще без напряга
Ну, есть типа разные райтеры. Есть более навороченный, который там стили-хуили-кастомизируемый. Он требует где-то по килобайту на ячейку из-за ООПшности. А есть потоковый, типа, вот как я дал. Там меньше кастомизации, но зато ОЗУ вообще не ест.