Pretvarjanje PySpark DataFrame v JSON

Pretvarjanje Pyspark Dataframe V Json



Prenos strukturiranih podatkov z uporabo JSON je možen in prav tako porabi malo pomnilnika. V primerjavi s PySpark RDD ali PySpark DataFrame JSON porabi malo pomnilnika in serializacije, ki je mogoča z JSON. PySpark DataFrame lahko pretvorimo v JSON z uporabo metode pyspark.sql.DataFrameWriter.json(). Poleg tega obstajata še dva načina za pretvorbo DataFrame v JSON.

Tema vsebine:

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,...)
  1. Orient se uporablja za prikaz pretvorjenega JSON kot želenega formata. Zajema 'zapise', 'tabelo', 'vrednosti', 'stolpce', 'indeks', 'razdelitev'.
  2. 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 pyspark

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

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

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

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

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