Tema sadržaja:
- PySpark DataFrame u JSON pomoću To_json() s ToPandas()
- PySpark DataFrame u JSON pomoću ToJSON()
- PySpark DataFrame u JSON pomoću Write.json()
Razmotrimo jednostavan PySpark DataFrame u svim primjerima i pretvorimo ga u JSON pomoću spomenutih funkcija.
Potreban modul:
Instalirajte biblioteku PySpark u svoje okruženje ako još nije instalirana. Za instalaciju možete koristiti sljedeću naredbu:
pip instaliraj pyspark
PySpark DataFrame u JSON pomoću To_json() s ToPandas()
Metoda to_json() dostupna je u Pandas modulu koji pretvara Pandas DataFrame u JSON. Ovu metodu možemo iskoristiti ako pretvorimo naš PySpark DataFrame u Pandas DataFrame. Kako bi se PySpark DataFrame pretvorio u Pandas DataFrame, koristi se metoda toPandas(). Pogledajmo sintaksu to_json() zajedno s njegovim parametrima.
Sintaksa:
dataframe_object.toPandas().to_json(orijent,indeks,...)
- Orient se koristi za prikaz pretvorenog JSON-a kao željenog formata. Uzima 'zapise', 'tablicu', 'vrijednosti', 'stupce', 'indeks', 'podjelu'.
- Indeks se koristi za uključivanje/uklanjanje indeksa iz pretvorenog JSON niza. Ako je postavljeno na “True”, indeksi se prikazuju. Inače, indeksi se neće prikazati ako je orijentacija 'split' ili 'table'.
Primjer 1: Orijentirajte kao 'Zapisi'
Napravite “skills_df” PySpark DataFrame s 3 retka i 4 stupca. Pretvorite ovaj DataFrame u JSON navođenjem orient parametra kao 'records'.
uvoz pysparkuvoz pande
iz pyspark.sql uvesti SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Savjet za Linux' ).getOrCreate()
# podaci o vještinama s 3 retka i 4 stupca
vještine =[{ 'iskaznica' : 123 , 'osoba' : 'Med' , 'vještina' : 'slika' , 'nagrada' : 25000 },
{ 'iskaznica' : 112 , 'osoba' : 'Mouni' , 'vještina' : 'ples' , 'nagrada' : 2000. godine },
{ 'iskaznica' : 153 , 'osoba' : 'Tulasi' , 'vještina' : 'čitanje' , 'nagrada' : 1200 }
]
# kreirajte podatkovni okvir vještina iz gornjih podataka
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Podaci o stvarnim vještinama
vještina_df.show()
# Pretvorite u JSON pomoću to_json() s orijentacijom kao 'zapisi'
json_skills_data = skill_df.toPandas().to_json(orijent= 'zapisi' )
ispis(json_skills_data)
Izlaz:
+---+------+-----+--------+
| id|osoba|nagrada| vještina|
+---+------+-----+--------+
| 123 | dušo| 25000 |slikanje|
| 112 | Mouni| 2000. godine | ples|
| 153 |Tulasi| 1200 | čitanje|
+---+------+-----+--------+
[{ 'iskaznica' : 123 , 'osoba' : 'Med' , 'nagrada' : 25000 , 'vještina' : 'slika' },{ 'iskaznica' : 112 , 'osoba' : 'Mouni' , 'nagrada' : 2000. godine , 'vještina' : 'ples' },{ 'iskaznica' : 153 , 'osoba' : 'Tulasi' , 'nagrada' : 1200 , 'vještina' : 'čitanje' }]
Vidimo da je PySpark DataFrame pretvoren u JSON niz s rječnikom vrijednosti. Ovdje ključevi predstavljaju naziv stupca, a vrijednost predstavlja vrijednost retka/ćelije u PySpark DataFrame.
Primjer 2: Orijentirajte kao 'Split'
Format JSON koji vraća 'split' orijentacija uključuje nazive stupaca koji imaju popis stupaca, popis indeksa i popis podataka. Slijedi format 'split' orijenta.
# Pretvorite u JSON pomoću to_json() s orijentacijom kao 'split'
json_skills_data = skill_df.toPandas().to_json(orijent= 'podjela' )
ispis(json_skills_data)
Izlaz:
{ 'kolone' :[ 'iskaznica' , 'osoba' , 'nagrada' , 'vještina' ], 'indeks' :[ 0 , 1 , 2 ], 'podaci' :[[ 123 , 'Med' , 25000 , 'slika' ],[ 112 , 'Mouni' , 2000. godine , 'ples' ],[ 153 , 'Tulasi' , 1200 , 'čitanje' ]]}Primjer 3: Orijentirajte kao 'Indeks'
Ovdje se svaki red iz PySpark DataFramea povlači u obliku rječnika s ključem kao nazivom stupca. Za svaki rječnik, pozicija indeksa navedena je kao ključ.
# Pretvori u JSON pomoću to_json() s orijentacijom kao 'index'
json_skills_data = skill_df.toPandas().to_json(orijent= 'indeks' )
ispis(json_skills_data)
Izlaz:
{ '0' :{ 'iskaznica' : 123 , 'osoba' : 'Med' , 'nagrada' : 25000 , 'vještina' : 'slika' }, '1' :{ 'iskaznica' : 112 , 'osoba' : 'Mouni' , 'nagrada' : 2000. godine , 'vještina' : 'ples' }, '2' :{ 'iskaznica' : 153 , 'osoba' : 'Tulasi' , 'nagrada' : 1200 , 'vještina' : 'čitanje' }}Primjer 4: Orijentirajte kao 'Stupci'
Stupci su ključni za svaki zapis. Svaki stupac sadrži rječnik koji uzima vrijednosti stupca s brojevima indeksa.
# Pretvori u JSON pomoću to_json() s orijentacijom kao 'stupci'
json_skills_data = skill_df.toPandas().to_json(orijent= 'kolone' )
ispis(json_skills_data)
Izlaz:
{ 'iskaznica' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'osoba' :{ '0' : 'Med' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'nagrada' :{ '0' : 25000 , '1' : 2000. godine , '2' : 1200 }, 'vještina' :{ '0' : 'slika' , '1' : 'ples' , '2' : 'čitanje' }}Primjer 5: Orijentirajte kao 'vrijednosti'
Ako su vam potrebne samo vrijednosti u JSON-u, možete odabrati orijentaciju 'vrijednosti'. Prikazuje svaki redak na popisu. Konačno, svi popisi su pohranjeni u popisu. Ovaj JSON je vrste ugniježđenog popisa.
# Pretvorite u JSON koristeći to_json() s orijentacijom kao 'vrijednostima'
json_skills_data = skill_df.toPandas().to_json(orijent= 'vrijednosti' )
ispis(json_skills_data)
Izlaz:
[[ 123 , 'Med' , 25000 , 'slika' ],[ 112 , 'Mouni' , 2000. godine , 'ples' ],[ 153 , 'Tulasi' , 1200 , 'čitanje' ]]Primjer 6: Orijentirajte kao 'Stol'
Orijentacija 'tablica' vraća JSON koji uključuje shemu s nazivima polja zajedno s vrstama podataka stupaca, indeksom kao primarnim ključem i Pandas verzijom. Nazivi stupaca s vrijednostima prikazuju se kao 'podaci'.
# Pretvorite u JSON pomoću to_json() s orijentacijom kao 'table'
json_skills_data = skill_df.toPandas().to_json(orijent= 'stol' )
ispis(json_skills_data)
Izlaz:
{ 'shema' :{ 'polja' :[{ 'Ime' : 'indeks' , 'tip' : 'cijeli broj' },{ 'Ime' : 'iskaznica' , 'tip' : 'cijeli broj' },{ 'Ime' : 'osoba' , 'tip' : 'niz' },{ 'Ime' : 'nagrada' , 'tip' : 'cijeli broj' },{ 'Ime' : 'vještina' , 'tip' : 'niz' }], 'Osnovni ključ' :[ 'indeks' ], 'pandas_verzija' : '1.4.0' }, 'podaci' :[{ 'indeks' : 0 , 'iskaznica' : 123 , 'osoba' : 'Med' , 'nagrada' : 25000 , 'vještina' : 'slika' },{ 'indeks' : 1 , 'iskaznica' : 112 , 'osoba' : 'Mouni' , 'nagrada' : 2000. godine , 'vještina' : 'ples' },{ 'indeks' : 2 , 'iskaznica' : 153 , 'osoba' : 'Tulasi' , 'nagrada' : 1200 , 'vještina' : 'čitanje' }]}Primjer 7: S indeksnim parametrom
Prvo, prosljeđujemo parametar indeksa tako da ga postavimo na 'True'. Za svaku vrijednost stupca vidjet ćete da se pozicija indeksa vraća kao ključ u rječniku.
U drugom izlazu vraćaju se samo nazivi stupaca ('stupci') i zapisi ('podaci') bez pozicija indeksa budući da je indeks postavljen na 'False'.
# Pretvorite u JSON koristeći to_json() s index=Truejson_skills_data = skill_df.toPandas().to_json(index=True)
print(json_skills_data, ' \n ' )
# Pretvorite u JSON koristeći to_json() s index=False
json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'podjela' )
ispis(json_skills_data)
Izlaz:
{ 'iskaznica' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'osoba' :{ '0' : 'Med' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'nagrada' :{ '0' : 25000 , '1' : 2000. godine , '2' : 1200 }, 'vještina' :{ '0' : 'slika' , '1' : 'ples' , '2' : 'čitanje' }}{ 'kolone' :[ 'iskaznica' , 'osoba' , 'nagrada' , 'vještina' ], 'podaci' :[[ 123 , 'Med' , 25000 , 'slika' ],[ 112 , 'Mouni' , 2000. godine , 'ples' ],[ 153 , 'Tulasi' , 1200 , 'čitanje' ]]
PySpark DataFrame u JSON pomoću ToJSON()
Metoda toJSON() koristi se za pretvaranje PySpark DataFrame u JSON objekt. U osnovi, vraća JSON niz koji je okružen popisom. The [‘{stupac:vrijednost,…}’,…. ] je format koji vraća ova funkcija. Ovdje se svaki redak iz PySpark DataFramea vraća kao rječnik s nazivom stupca kao ključem.
Sintaksa:
dataframe_object.toJSON()Moguće je proslijediti parametre kao što su indeks, oznake stupaca i tip podataka.
Primjer:
Napravite “skills_df” PySpark DataFrame s 5 redaka i 4 stupca. Pretvorite ovaj DataFrame u JSON pomoću metode toJSON().
uvoz pysparkiz pyspark.sql uvesti SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Savjet za Linux' ).getOrCreate()
# podataka o vještinama s 5 redaka i 4 stupca
vještine =[{ 'iskaznica' : 123 , 'osoba' : 'Med' , 'vještina' : 'slika' , 'nagrada' : 25000 },
{ 'iskaznica' : 112 , 'osoba' : 'Mouni' , 'vještina' : 'glazba/ples' , 'nagrada' : 2000. godine },
{ 'iskaznica' : 153 , 'osoba' : 'Tulasi' , 'vještina' : 'čitanje' , 'nagrada' : 1200 },
{ 'iskaznica' : 173 , 'osoba' : 'Ran' , 'vještina' : 'glazba, muzika' , 'nagrada' : 2000. godine },
{ 'iskaznica' : 43 , 'osoba' : 'Kamala' , 'vještina' : 'čitanje' , 'nagrada' : 10000 }
]
# kreirajte podatkovni okvir vještina iz gornjih podataka
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Podaci o stvarnim vještinama
vještina_df.show()
# Pretvori u JSON polje
json_skills_data = skills_df.toJSON().collect()
ispis(json_skills_data)
Izlaz:
+---+------+-----+----------+| id|osoba|nagrada| vještina|
+---+------+-----+----------+
| 123 | dušo| 25000 | slikanje|
| 112 | Mouni| 2000. godine |glazba/ples|
| 153 |Tulasi| 1200 | čitanje|
| 173 | Ran| 2000. godine | glazba|
| 43 |Kamala| 10000 | čitanje|
+---+------+-----+----------+
[ '{'id':123,'person':'Dušo','prize':25000,'skill':'painting'}' , '{'id':112,'person':'Mouni','prize':2000,'skill':'music/dance'}' , '{'id':153,'person':'Tulasi','prize':1200,'skill':'reading'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'music'}' , '{'id':43,'person':'Kamala','prize':10000,'skill':'reading'}' ]
Postoji 5 redaka u PySpark DataFrame. Svih ovih 5 redaka vraća se kao rječnik nizova koji su odvojeni zarezom.
PySpark DataFrame u JSON pomoću Write.json()
Metoda write.json() dostupna je u PySparku koja zapisuje/sprema PySpark DataFrame u JSON datoteku. Uzima naziv/put datoteke kao parametar. U osnovi, vraća JSON u više datoteka (particionirane datoteke). Za spajanje svih njih u jednu datoteku, možemo koristiti metodu coalesce().
Sintaksa:
dataframe_object.coalesce( 1 ).write.json('ime_datoteke')- Način dodavanja – dataframe_object.write.mode('dodaj').json('ime_datoteke')
- Način prepisivanja – dataframe_object.write.mode('prebriši').json('ime_datoteke')
Moguće je dodati/prebrisati postojeći JSON. Koristeći write.mode(), možemo dodati podatke prosljeđivanjem 'append' ili prebrisati postojeće JSON podatke prosljeđivanjem 'overwrite' ovoj funkciji.
Primjer 1:
Napravite “skills_df” PySpark DataFrame s 3 retka i 4 stupca. Zapišite ovaj DataFrame u JSON.
uvoz pysparkuvoz pande
iz pyspark.sql uvesti SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Savjet za Linux' ).getOrCreate()
# podaci o vještinama s 3 retka i 4 stupca
vještine =[{ 'iskaznica' : 123 , 'osoba' : 'Med' , 'vještina' : 'slika' , 'nagrada' : 25000 },
{ 'iskaznica' : 112 , 'osoba' : 'Mouni' , 'vještina' : 'ples' , 'nagrada' : 2000. godine },
{ 'iskaznica' : 153 , 'osoba' : 'Tulasi' , 'vještina' : 'čitanje' , 'nagrada' : 1200 }
]
# kreirajte podatkovni okvir vještina iz gornjih podataka
skills_df = linuxhint_spark_app.createDataFrame(skills)
# write.json()
vještina_df.coalesce( 1 ).write.json( 'skills_data' )
JSON datoteka:
Vidimo da mapa Skills_data uključuje particionirane JSON podatke.
Otvorimo JSON datoteku. Vidimo da su svi redovi iz PySpark DataFramea pretvoreni u JSON.
Postoji 5 redaka u PySpark DataFrame. Svih ovih 5 redaka vraća se kao rječnik nizova koji su odvojeni zarezom.
Primjer 2:
Stvorite “skills2_df” PySpark DataFrame s jednim retkom. Dodajte jedan redak prethodnoj JSON datoteci navodeći način kao 'dodaj'.
uvoz pysparkuvoz pande
iz pyspark.sql uvesti SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Savjet za Linux' ).getOrCreate()
vještine2 =[{ 'iskaznica' : 78 , 'osoba' : 'Mary' , 'vještina' : 'jahanje' , 'nagrada' : 8960 }
]
# kreirajte podatkovni okvir vještina iz gornjih podataka
skills2_df = linuxhint_spark_app.createDataFrame(skills2)
# write.json() s načinom dodavanja.
skills2_df.write.mode( 'dodati' ).json( 'skills_data' )
JSON datoteka:
Možemo vidjeti particionirane JSON datoteke. Prva datoteka sadrži prve DataFrame zapise, a druga datoteka sadrži drugi DataFrame zapis.
Zaključak
Postoje tri različita načina za pretvaranje PySpark DataFrame u JSON. Prvo smo raspravljali o metodi to_json() koja pretvara u JSON pretvaranjem PySpark DataFramea u Pandas DataFrame s različitim primjerima uzimajući u obzir različite parametre. Zatim smo upotrijebili metodu toJSON(). Na kraju, naučili smo kako koristiti funkciju write.json() za pisanje PySpark DataFramea u JSON. Pomoću ove funkcije moguće je dodavanje i prepisivanje.