Tema vsebine:
- PySpark DataFrame v JSON z uporabo To_json() s ToPandas()
- PySpark DataFrame v JSON z uporabo ToJSON()
- PySpark DataFrame v JSON z uporabo Write.json()
Oglejmo si preprost PySpark DataFrame v vseh primerih in ga pretvorimo v JSON z uporabo omenjenih funkcij.
Potreben modul:
Namestite knjižnico PySpark v svoje okolje, če še ni nameščena. Za namestitev uporabite naslednji ukaz:
pip namestite pyspark
PySpark DataFrame v JSON z uporabo To_json() s ToPandas()
Metoda to_json() je na voljo v modulu Pandas, ki pretvori Pandas DataFrame v JSON. To metodo lahko uporabimo, če naš PySpark DataFrame pretvorimo v Pandas DataFrame. Za pretvorbo PySpark DataFrame v Pandas DataFrame se uporablja metoda toPandas(). Oglejmo si sintakso funkcije to_json() skupaj z njenimi parametri.
Sintaksa:
dataframe_object.toPandas().to_json(orient,index,...)
- Orient se uporablja za prikaz pretvorjenega JSON kot želenega formata. Zajema 'zapise', 'tabelo', 'vrednosti', 'stolpce', 'indeks', 'razdelitev'.
- Indeks se uporablja za vključitev/odstranitev indeksa iz pretvorjenega niza JSON. Če je nastavljeno na »True«, se prikažejo indeksi. V nasprotnem primeru indeksi ne bodo prikazani, če je orientacija 'split' ali 'table'.
1. primer: Orient kot »Zapisi«
Ustvarite »skills_df« PySpark DataFrame s 3 vrsticami in 4 stolpci. Pretvorite ta DataFrame v JSON tako, da določite parameter orient kot »zapisi«.
uvozi pysparkuvoz pand
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# podatki o spretnostih s 3 vrsticami in 4 stolpci
spretnosti =[{ 'id' : 123 , 'oseba' : 'Draga' , 'spretnost' : 'slika' , 'nagrada' : 25000 },
{ 'id' : 112 , 'oseba' : 'Mouni' , 'spretnost' : 'ples' , 'nagrada' : 2000 },
{ 'id' : 153 , 'oseba' : 'Tulasi' , 'spretnost' : 'branje' , 'nagrada' : 1200 }
]
# ustvarite podatkovni okvir spretnosti iz zgornjih podatkov
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Podatki o dejanskih veščinah
spretnosti_df.show()
# Pretvori v JSON z uporabo to_json() z orientacijo kot 'zapisi'
json_skills_data = skills_df.toPandas().to_json(orient= 'zapisi' )
print(json_skills_data)
Izhod:
+---+------+-----+--------+
| id|oseba|nagrada| spretnost|
+---+------+-----+--------+
| 123 | Draga| 25000 |slikanje|
| 112 | Mouni| 2000 | ples|
| 153 |Tulasi| 1200 | branje|
+---+------+-----+--------+
[{ 'id' : 123 , 'oseba' : 'Draga' , 'nagrada' : 25000 , 'spretnost' : 'slika' },{ 'id' : 112 , 'oseba' : 'Mouni' , 'nagrada' : 2000 , 'spretnost' : 'ples' },{ 'id' : 153 , 'oseba' : 'Tulasi' , 'nagrada' : 1200 , 'spretnost' : 'branje' }]
Vidimo lahko, da je PySpark DataFrame pretvorjen v matriko JSON s slovarjem vrednosti. Tukaj ključi predstavljajo ime stolpca, vrednost pa vrednost vrstice/celice v PySpark DataFrame.
2. primer: orientacija kot »razcep«
Format JSON, ki ga vrne usmerjenost »split«, vključuje imena stolpcev, ki imajo seznam stolpcev, seznam indeksov in seznam podatkov. Sledi format 'split' orienta.
# Pretvori v JSON z uporabo to_json() z orientacijo kot 'split'
json_skills_data = skills_df.toPandas().to_json(orient= 'split' )
print(json_skills_data)
Izhod:
{ 'stolpci' :[ 'id' , 'oseba' , 'nagrada' , 'spretnost' ], 'indeks' :[ 0 , 1 , 2 ], 'podatki' :[[ 123 , 'Draga' , 25000 , 'slika' ],[ 112 , 'Mouni' , 2000 , 'ples' ],[ 153 , 'Tulasi' , 1200 , 'branje' ]]}3. primer: orientacija kot »Index«
Tukaj je vsaka vrstica iz PySpark DataFrame umaknjena v obliki slovarja s ključem kot imenom stolpca. Za vsak slovar je položaj indeksa določen kot ključ.
# Pretvori v JSON z uporabo to_json() z orientacijo kot 'index'
json_skills_data = skills_df.toPandas().to_json(orient= 'index' )
print(json_skills_data)
Izhod:
{ '0' :{ 'id' : 123 , 'oseba' : 'Draga' , 'nagrada' : 25000 , 'spretnost' : 'slika' }, '1' :{ 'id' : 112 , 'oseba' : 'Mouni' , 'nagrada' : 2000 , 'spretnost' : 'ples' }, '2' :{ 'id' : 153 , 'oseba' : 'Tulasi' , 'nagrada' : 1200 , 'spretnost' : 'branje' }}Primer 4: orientacija kot »Stolpci«
Stolpci so ključni za vsak zapis. Vsak stolpec vsebuje slovar, ki zajema vrednosti stolpcev z indeksnimi številkami.
# Pretvori v JSON z uporabo to_json() z usmerjenostjo kot 'stolpci'
json_skills_data = skills_df.toPandas().to_json(orient= 'stolpci' )
print(json_skills_data)
Izhod:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'oseba' :{ '0' : 'Draga' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'nagrada' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'spretnost' :{ '0' : 'slika' , '1' : 'ples' , '2' : 'branje' }}Primer 5: Orient kot 'Vrednosti'
Če potrebujete samo vrednosti v JSON, se lahko odločite za orientacijo »vrednosti«. Vsako vrstico prikaže na seznamu. Končno so vsi seznami shranjeni na seznamu. Ta JSON je vrste ugnezdenega seznama.
# Pretvori v JSON z uporabo to_json() z orientacijo kot 'vrednostmi'
json_skills_data = skills_df.toPandas().to_json(orient= 'vrednote' )
print(json_skills_data)
Izhod:
[[ 123 , 'Draga' , 25000 , 'slika' ],[ 112 , 'Mouni' , 2000 , 'ples' ],[ 153 , 'Tulasi' , 1200 , 'branje' ]]6. primer: orientacija kot »tabela«
Orientacija »table« vrne JSON, ki vključuje shemo z imeni polj skupaj s podatkovnimi vrstami stolpcev, indeksom kot primarnim ključem in različico Pandas. Imena stolpcev z vrednostmi so prikazana kot »podatki«.
# Pretvori v JSON z uporabo to_json() z orientacijo kot 'table'
json_skills_data = skills_df.toPandas().to_json(orient= 'table' )
print(json_skills_data)
Izhod:
{ 'shema' :{ 'polja' :[{ 'ime' : 'indeks' , 'tip' : 'celo število' },{ 'ime' : 'id' , 'tip' : 'celo število' },{ 'ime' : 'oseba' , 'tip' : 'vrvica' },{ 'ime' : 'nagrada' , 'tip' : 'celo število' },{ 'ime' : 'spretnost' , 'tip' : 'vrvica' }], 'primarni ključ' :[ 'indeks' ], 'pandas_version' : '1.4.0' }, 'podatki' :[{ 'indeks' : 0 , 'id' : 123 , 'oseba' : 'Draga' , 'nagrada' : 25000 , 'spretnost' : 'slika' },{ 'indeks' : 1 , 'id' : 112 , 'oseba' : 'Mouni' , 'nagrada' : 2000 , 'spretnost' : 'ples' },{ 'indeks' : 2 , 'id' : 153 , 'oseba' : 'Tulasi' , 'nagrada' : 1200 , 'spretnost' : 'branje' }]}Primer 7: Z indeksnim parametrom
Najprej posredujemo parameter indeksa tako, da ga nastavimo na »True«. Za vsako vrednost stolpca boste videli, da je položaj indeksa vrnjen kot ključ v slovarju.
V drugem izhodu so vrnjena samo imena stolpcev (»stolpci«) in zapisi (»podatki«) brez položajev indeksa, ker je indeks nastavljen na »False«.
# Pretvori v JSON z uporabo to_json() z index=Truejson_skills_data = skills_df.toPandas().to_json(index=True)
print(json_skills_data, ' \n ' )
# Pretvori v JSON z uporabo to_json() z index=False
json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'razcep' )
print(json_skills_data)
Izhod:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'oseba' :{ '0' : 'Draga' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'nagrada' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'spretnost' :{ '0' : 'slika' , '1' : 'ples' , '2' : 'branje' }}{ 'stolpci' :[ 'id' , 'oseba' , 'nagrada' , 'spretnost' ], 'podatki' :[[ 123 , 'Draga' , 25000 , 'slika' ],[ 112 , 'Mouni' , 2000 , 'ples' ],[ 153 , 'Tulasi' , 1200 , 'branje' ]]
PySpark DataFrame v JSON z uporabo ToJSON()
Metoda toJSON() se uporablja za pretvorbo PySpark DataFrame v objekt JSON. V bistvu vrne niz JSON, ki je obdan s seznamom. The [‘{stolpec:vrednost,…}’,…. ] je oblika, ki jo vrne ta funkcija. Tukaj je vsaka vrstica iz PySpark DataFrame vrnjena kot slovar z imenom stolpca kot ključem.
Sintaksa:
dataframe_object.toJSON()Mogoče je posredovati parametre, kot so indeks, oznake stolpcev in vrsta podatkov.
primer:
Ustvarite »skills_df« PySpark DataFrame s 5 vrsticami in 4 stolpci. Pretvorite ta DataFrame v JSON z metodo toJSON().
uvozi pysparkiz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# podatki o spretnostih s 5 vrsticami in 4 stolpci
spretnosti =[{ 'id' : 123 , 'oseba' : 'Draga' , 'spretnost' : 'slika' , 'nagrada' : 25000 },
{ 'id' : 112 , 'oseba' : 'Mouni' , 'spretnost' : 'glasba/ples' , 'nagrada' : 2000 },
{ 'id' : 153 , 'oseba' : 'Tulasi' , 'spretnost' : 'branje' , 'nagrada' : 1200 },
{ 'id' : 173 , 'oseba' : 'Ran' , 'spretnost' : 'glasba' , 'nagrada' : 2000 },
{ 'id' : 43 , 'oseba' : 'Kamala' , 'spretnost' : 'branje' , 'nagrada' : 10000 }
]
# ustvarite podatkovni okvir spretnosti iz zgornjih podatkov
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Podatki o dejanskih spretnostih
spretnosti_df.show()
# Pretvori v polje JSON
json_skills_data = skills_df.toJSON().collect()
print(json_skills_data)
Izhod:
+---+------+-----+----------+| id|oseba|nagrada| spretnost|
+---+------+-----+----------+
| 123 | Draga| 25000 | slikanje|
| 112 | Mouni| 2000 |glasba/ples|
| 153 |Tulasi| 1200 | branje|
| 173 | Ran| 2000 | glasba|
| 43 |Kamala| 10000 | branje|
+---+------+-----+----------+
[ '{'id':123,'person':'Honey','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'}' ]
V PySpark DataFrame je 5 vrstic. Vseh teh 5 vrstic je vrnjenih kot slovar nizov, ki so ločeni z vejico.
PySpark DataFrame v JSON z uporabo Write.json()
Metoda write.json() je na voljo v PySparku, ki zapiše/shranjuje PySpark DataFrame v datoteko JSON. Kot parameter vzame ime datoteke/pot. V bistvu vrne JSON v več datotekah (razdeljene datoteke). Za združitev vseh v eno datoteko lahko uporabimo metodo coalesce().
Sintaksa:
dataframe_object.coalesce( 1 ).write.json('ime_datoteke')- Način dodajanja – dataframe_object.write.mode('priloži').json('ime_datoteke')
- Način prepisovanja – dataframe_object.write.mode('overwrite').json('ime_datoteke')
Mogoče je dodati/prepisati obstoječi JSON. Z uporabo write.mode() lahko dodamo podatke s posredovanjem »priloži« ali prepišemo obstoječe podatke JSON s posredovanjem »overwrite« tej funkciji.
Primer 1:
Ustvarite »skills_df« PySpark DataFrame s 3 vrsticami in 4 stolpci. Zapišite ta DataFrame v JSON.
uvozi pysparkuvoz pand
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# podatki o spretnostih s 3 vrsticami in 4 stolpci
spretnosti =[{ 'id' : 123 , 'oseba' : 'Draga' , 'spretnost' : 'slika' , 'nagrada' : 25000 },
{ 'id' : 112 , 'oseba' : 'Mouni' , 'spretnost' : 'ples' , 'nagrada' : 2000 },
{ 'id' : 153 , 'oseba' : 'Tulasi' , 'spretnost' : 'branje' , 'nagrada' : 1200 }
]
# ustvarite podatkovni okvir spretnosti iz zgornjih podatkov
skills_df = linuxhint_spark_app.createDataFrame(skills)
# write.json()
skills_df.coalesce( 1 ).write.json( 'skills_data' )
Datoteka JSON:
Vidimo lahko, da mapa Skills_data vključuje particionirane podatke JSON.
Odprimo datoteko JSON. Vidimo lahko, da so vse vrstice iz PySpark DataFrame pretvorjene v JSON.
V PySpark DataFrame je 5 vrstic. Vseh teh 5 vrstic je vrnjenih kot slovar nizov, ki so ločeni z vejico.
Primer 2:
Ustvarite »skills2_df« PySpark DataFrame z eno vrstico. Dodajte eno vrstico prejšnji datoteki JSON tako, da določite način kot »dodaj«.
uvozi pysparkuvoz pand
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
spretnosti2 =[{ 'id' : 78 , 'oseba' : 'Mary' , 'spretnost' : 'jahati' , 'nagrada' : 8960 }
]
# ustvarite podatkovni okvir spretnosti iz zgornjih podatkov
skills2_df = linuxhint_spark_app.createDataFrame(skills2)
# write.json() z načinom dodajanja.
skills2_df.write.mode( 'pripni' ).json( 'skills_data' )
Datoteka JSON:
Vidimo lahko particionirane datoteke JSON. Prva datoteka vsebuje prve zapise DataFrame, druga datoteka pa drugi zapis DataFrame.
Zaključek
Obstajajo trije različni načini za pretvorbo PySpark DataFrame v JSON. Najprej smo razpravljali o metodi to_json(), ki pretvori v JSON s pretvorbo PySpark DataFrame v Pandas DataFrame z različnimi primeri z upoštevanjem različnih parametrov. Nato smo uporabili metodo toJSON(). Nazadnje smo se naučili, kako uporabiti funkcijo write.json() za pisanje PySpark DataFrame v JSON. S to funkcijo sta možna dodajanje in prepisovanje.