Pretvaranje PySpark DataFrame u JSON

Pretvaranje Pyspark Dataframe U Json



Prijenos strukturiranih podataka pomoću JSON-a je moguć i također troši malo memorije. U usporedbi s PySpark RDD ili PySpark DataFrame, JSON troši malo memorije i serijalizacije koja je moguća s JSON-om. U mogućnosti smo pretvoriti PySpark DataFrame u JSON pomoću metode pyspark.sql.DataFrameWriter.json(). Osim njega, postoje još dva načina pretvaranja DataFramea u JSON.

Tema sadržaja:

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,...)
  1. Orient se koristi za prikaz pretvorenog JSON-a kao željenog formata. Uzima 'zapise', 'tablicu', 'vrijednosti', 'stupce', 'indeks', 'podjelu'.
  2. 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 pyspark

uvoz 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=True

json_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 pyspark

iz 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')
  1. Način dodavanja – dataframe_object.write.mode('dodaj').json('ime_datoteke')
  2. 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 pyspark

uvoz 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 pyspark

uvoz 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.