Jump to content
Che

Ajutor: json foarte mari. Alta metoda ? [Python|SQL?]

Recommended Posts

Posted

Am cam 1028 de fisiere .json de ~100-150mb fiecare.

Ele sunt niste tabele ale unei baze de date in felul urmator:

Coloane===> NUME | COL_1 | COL_2 | COL_3|...|COL_n|

Date exemplu: Persoana_1| 0.24|True|2.89|0.00008756|0.654762|27.0|...|etc.

Coloanele identice care se gasesc in toate tabelele: NUME, data nasterii, varsta, greutate, inaltime, rasa etc. sunt cam 7-8 coloane identice, restul coloanelor (in numar variabil de la un tabel la altul) nu sunt identice deloc si fiecare tabel are alte coloane diferite.

 

Este posibil ca sa fie persoane lipsa din unele tabele iar din altele sa fie altele in plus.

 

Acuma, eu am incercat sa le unesc pe toate intr-un singur fisier de tip .json, folosind python.

Adica iau de exemplu pentru prima perosana si notez coloanele care se repeta in toate tabelele (atentie pot fi persoana cu acelasi nume si prenume dar care sa difere la greutate si inaltime sau la celelalte coloane care se repeta in toate tabelele), de exemplu: Persoana_1, 75kg, 1.84m etc. si apoi sa fac asa:

trec coloanele diferite din primul tabel .json dupa care caut persoana dupa nume, prenume si coloanele care se repeta (ca sa fiu sigur ca nu e altul cu acelasi nume si prenume) in al doilea fisier .json si, daca e gasit ii adsaug noile coloane cu valorile respective, daca nu l-am gasit in al doilea fisier ii trec coloanele respective dar cu "NAN" ca si valoare. Si fac asa pentru fiecare fisier in parte.

 

E o problema cu care ma confrunt: fisierele fiind asa de mari si atat de multe, la un momentdat dupa ce imi proceseaza un anumit numar de fisiere imi da o eroare de memorie fiindca nu am destul RAM ca sa le pot combina. (In total ele au peste 60Gb.)

 

Cum sa fac sa nu se mai intample asta ?

Este vreo metoda in python sau in SQL (SQLite m-am gandit sa folosesc in final) care sa evite chestia asta cu memoria ?

Ma gandesc sa incerc si in felul urmator:

Cu python scriu fiecare fisier .json intr-un tabel SQLite dupa care cum sa fac ca sa fac din toate tabelele unul singur ? Si tot asa, sa verific cu atentie sa nu incurc persoanele care au acelasi nume si prenume verificand si celelalte coloane personale de care va ziceam (ex. inaltime, varsta etc.). Cum as putea sa fac asta in SQL/SQLite folsind python, va rog ?

Multumesc mult!

Posted

@gigiRoman Multumesc! Am sa incerc. Eu ma gandeam ca poate este vreo comada pentru SQLite ca ar fi mai usor sa fac in felul urmator:

Iau fiecare fisier json si in transform in tabel din baza de date SQLite.

Apoi, cu o comanda, tot cu python, cauta fiecare persoana in parte in toate tabelele si apoi daca gaseste valori sa le ia iar daca nu sa bage "NAN". Cum a terminat cu un tabel, cum sa-i dea delete sau, daca nu, dupa ce le-a verificat pe toate sa le dea delete si sa pastreze tabelul original nou creat pe baza tuturor tabelelor.

Nu este o asa comanda ? (Mi-ar fi mai simplu.)

(Cam aceeasi problema o am si eu ca si cel care a intrebat acolo adica nu le pot incarca pe toate in memorie ca nu am 60Gb RAM.)

Multumesc mult pentru ajutor !

 

@aelius Sunt foarte sigur ca sunt json fiindca eu le-am creat cu ajutorul unui script facut de mine in python, pe baza a niste date luate de pe niste situri. Am facut si proba, cu fisere json mai mici (de test, generate cu niste date la intamplare, mai putine), merge sa parsez, sa fac ce vreau, doar ca astea sunt uriase, fiecare are cate 50-52.000 de randuri si cate 15-30 de coloane.

Posted

da si eu zic la fel , chiar ma intrebam de ce nu folosesti csv , asa daca tot e json cred ca il poti importa pe un mongodb daca te chinuii putin , cei de la mongo au mongo compass ce ruleaza pe windows si linux si cred ca iti poti face treaba linistit , asa ca alta idee

 

da ce fel de db e , ca mai stiu si eu unul de hoteluri cei e drept era mai mic de 20 si am rezolvat prin csv 

  • Thanks 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...