„PySpark DataFrame“ konvertavimas į JSON

Pyspark Dataframe Konvertavimas I Json



Galimas struktūrinių duomenų perdavimas naudojant JSON, be to, sunaudojama mažai atminties. Palyginti su PySpark RDD arba PySpark DataFrame, JSON sunaudoja mažai atminties ir serializavimo, kuris įmanomas naudojant JSON. Mes galime konvertuoti PySpark DataFrame į JSON naudodami pyspark.sql.DataFrameWriter.json() metodą. Be jo, yra dar du būdai konvertuoti DataFrame į JSON.

Turinio tema:

Visuose pavyzdžiuose apsvarstykite paprastą PySpark DataFrame ir konvertuokite jį į JSON naudodami minėtas funkcijas.







Reikalingas modulis:

Įdiekite PySpark biblioteką savo aplinkoje, jei ji dar neįdiegta. Norėdami ją įdiegti, galite vadovautis šia komanda:



pip įdiegti pyspark

PySpark DataFrame į JSON naudojant To_json() su ToPandas()

Metodas to_json() pasiekiamas Pandas modulyje, kuris konvertuoja Pandas DataFrame į JSON. Šį metodą galime panaudoti, jei konvertuosime PySpark DataFrame į Pandas DataFrame. Norint konvertuoti PySpark DataFrame į Pandas DataFrame, naudojamas toPandas() metodas. Pažiūrėkime to_json () sintaksę kartu su jo parametrais.



Sintaksė:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Orient naudojamas konvertuotam JSON rodyti norimu formatu. Tam reikalingi „įrašai“, „lentelė“, „reikšmės“, „stulpeliai“, „indeksas“, „skilimas“.
  2. Indeksas naudojamas indeksui įtraukti / pašalinti iš konvertuotos JSON eilutės. Jei nustatyta į „True“, rodomi indeksai. Priešingu atveju indeksai nebus rodomi, jei orientacija yra 'padalinta' arba 'lentelė'.

1 pavyzdys: orientuotis kaip „įrašai“

Sukurkite „skills_df“ PySpark DataFrame su 3 eilėmis ir 4 stulpeliais. Konvertuokite šį „DataFrame“ į JSON, nurodydami orientacinį parametrą kaip „įrašai“.

importuoti pyspark

importuoti pandas

iš pyspark.sql importuoti SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()

# įgūdžių duomenys su 3 eilutėmis ir 4 stulpeliais

įgūdžiai =[{ 'id' : 123 , 'asmuo' : 'Medus' , 'įgūdžiai' : 'tapyba' , 'prizas' : 25 000 },

{ 'id' : 112 , 'asmuo' : 'Mouni' , 'įgūdžiai' : 'šokis' , 'prizas' : 2000 m },

{ 'id' : 153 , 'asmuo' : 'Tulasi' , 'įgūdžiai' : 'skaitymas' , 'prizas' : 1200 }

]

# sukurkite įgūdžių duomenų rėmelį iš aukščiau pateiktų duomenų

skill_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiniai įgūdžių duomenys

skill_df.show()

# Konvertuoti į JSON naudojant to_json() su orientacija kaip „įrašai“

json_skills_data = įgūdžiai_df.toPandas().to_json(orient= 'įrašai' )

print (json_skills_data)

Išvestis:



+---+------+-----+--------+

| id|asmuo|prizas| įgūdis|

+---+------+-----+--------+

| 123 | Medus| 25 000 |tapyba|

| 112 | Mouni| 2000 m | šokti|

| 153 |Tulasi| 1200 | skaitymas|

+---+------+-----+--------+

[{ 'id' : 123 , 'asmuo' : 'Medus' , 'prizas' : 25 000 , 'įgūdis' : 'tapyba' },{ 'id' : 112 , 'asmuo' : 'Mouni' , 'prizas' : 2000 m , 'įgūdis' : 'šokis' },{ 'id' : 153 , 'asmuo' : 'Tulasi' , 'prizas' : 1200 , 'įgūdis' : 'skaitymas' }]

Matome, kad PySpark DataFrame konvertuojamas į JSON masyvą su reikšmių žodynu. Čia raktai žymi stulpelio pavadinimą, o reikšmė – eilutės / langelio reikšmę PySpark DataFrame.

2 pavyzdys: Orientuokite kaip „Split“

JSON formatas, kurį grąžina „padalinta“ orientacija, apima stulpelių pavadinimus, kuriuose yra stulpelių sąrašas, indeksų sąrašas ir duomenų sąrašas. Toliau pateikiamas „padalintos“ orientacijos formatas.

# Konvertuoti į JSON naudojant to_json() su orientacija kaip 'skilimas'

json_skills_data = įgūdžiai_df.toPandas().to_json(orient= 'padalinti' )

print (json_skills_data)

Išvestis:

{ 'stulpeliai' :[ 'id' , 'asmuo' , 'prizas' , 'įgūdis' ], 'indeksas' :[ 0 , 1 , 2 ], 'duomenys' :[[ 123 , 'Medus' , 25 000 , 'tapyba' ],[ 112 , 'Mouni' , 2000 m , 'šokis' ],[ 153 , 'Tulasi' , 1200 , 'skaitymas' ]]}

3 pavyzdys: orientuotis kaip „indeksas“

Čia kiekviena „PySpark DataFrame“ eilutė pašalinama kaip žodynas su raktu kaip stulpelio pavadinimas. Kiekviename žodyne rodyklės padėtis nurodoma kaip raktas.

# Konvertuoti į JSON naudojant to_json() su orientacija kaip „index“

json_skills_data = įgūdžiai_df.toPandas().to_json(orient= 'indeksas' )

print (json_skills_data)

Išvestis:

{ '0' :{ 'id' : 123 , 'asmuo' : 'Medus' , 'prizas' : 25 000 , 'įgūdis' : 'tapyba' }, '1' :{ 'id' : 112 , 'asmuo' : 'Mouni' , 'prizas' : 2000 m , 'įgūdis' : 'šokis' }, '2' :{ 'id' : 153 , 'asmuo' : 'Tulasi' , 'prizas' : 1200 , 'įgūdis' : 'skaitymas' }}

4 pavyzdys: orientuotis kaip „stulpeliai“

Stulpeliai yra kiekvieno įrašo raktas. Kiekviename stulpelyje yra žodynas, kuriame pateikiamos stulpelių reikšmės su indekso numeriais.

# Konvertuoti į JSON naudojant to_json() su orientacija kaip stulpeliai

json_skills_data = įgūdžiai_df.toPandas().to_json(orient= 'stulpeliai' )

print (json_skills_data)

Išvestis:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'asmuo' :{ '0' : 'Medus' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'prizas' :{ '0' : 25 000 , '1' : 2000 m , '2' : 1200 }, 'įgūdis' :{ '0' : 'tapyba' , '1' : 'šokis' , '2' : 'skaitymas' }}

5 pavyzdys: orientuotis kaip „vertybės“

Jei jums reikia tik JSON reikšmių, galite pasirinkti „vertybių“ orientaciją. Jis rodo kiekvieną sąrašo eilutę. Galiausiai visi sąrašai yra saugomi sąraše. Šis JSON yra įdėtojo sąrašo tipo.

# Konvertuoti į JSON naudojant to_json() su orientacija kaip 'vertes'

json_skills_data = įgūdžiai_df.toPandas().to_json(orient= 'vertybes' )

print (json_skills_data)

Išvestis:

[[ 123 , 'Medus' , 25 000 , 'tapyba' ],[ 112 , 'Mouni' , 2000 m , 'šokis' ],[ 153 , 'Tulasi' , 1200 , 'skaitymas' ]]

6 pavyzdys: Orientuokite kaip 'lentelę'

„Lentelės“ orientacija grąžina JSON, apimančią schemą su laukų pavadinimais kartu su stulpelių duomenų tipais, indeksu kaip pirminiu raktu ir Pandas versija. Stulpelių pavadinimai su reikšmėmis rodomi kaip „duomenys“.

# Konvertuoti į JSON naudojant to_json() su orientacija kaip 'lentelė'

json_skills_data = įgūdžiai_df.toPandas().to_json(orient= 'stalas' )

print (json_skills_data)

Išvestis:

{ 'schema' :{ 'laukai' :[{ 'vardas' : 'indeksas' , 'tipas' : 'sveikasis skaičius' },{ 'vardas' : 'id' , 'tipas' : 'sveikasis skaičius' },{ 'vardas' : 'asmuo' , 'tipas' : 'styga' },{ 'vardas' : 'prizas' , 'tipas' : 'sveikasis skaičius' },{ 'vardas' : 'įgūdis' , 'tipas' : 'styga' }], 'pirminis raktas' :[ 'indeksas' ], 'pandos_version' : '1.4.0' }, 'duomenys' :[{ 'indeksas' : 0 , 'id' : 123 , 'žmogus' : 'Medus' , 'prizas' : 25 000 , 'įgūdis' : 'tapyba' },{ 'indeksas' : 1 , 'id' : 112 , 'žmogus' : 'Mouni' , 'prizas' : 2000 m , 'įgūdis' : 'šokis' },{ 'indeksas' : 2 , 'id' : 153 , 'asmuo' : 'Tulasi' , 'prizas' : 1200 , 'įgūdis' : 'skaitymas' }]}

7 pavyzdys: su indekso parametru

Pirmiausia perduodame indekso parametrą, nustatydami jį į „True“. Kiekvienai stulpelio reikšmei pamatysite, kad rodyklės padėtis grąžinama kaip raktas žodyne.

Antroje išvestyje grąžinami tik stulpelių pavadinimai („stulpeliai“) ir įrašai („duomenys“) be indekso pozicijų, nes indeksas nustatytas į „False“.

# Konvertuokite į JSON naudodami to_json() su index=True

json_skills_data = įgūdžiai_df.toPandas().to_json(index=True)

print(json_skills_data, \n )

# Konvertuokite į JSON naudodami to_json() su index=False

json_skills_data= skill_df.toPandas().to_json(index=False,orient= 'skilimas' )

print (json_skills_data)

Išvestis:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'žmogus' :{ '0' : 'Medus' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'prizas' :{ '0' : 25 000 , '1' : 2000 m , '2' : 1200 }, 'įgūdis' :{ '0' : 'tapyba' , '1' : 'šokis' , '2' : 'skaitymas' }}

{ 'stulpeliai' :[ 'id' , 'asmuo' , 'prizas' , 'įgūdis' ], 'duomenys' :[[ 123 , 'Medus' , 25 000 , 'tapyba' ],[ 112 , 'Mouni' , 2000 m , 'šokis' ],[ 153 , 'Tulasi' , 1200 , 'skaitymas' ]]

PySpark DataFrame į JSON naudojant ToJSON()

Metodas toJSON() naudojamas konvertuoti PySpark DataFrame į JSON objektą. Iš esmės jis grąžina JSON eilutę, kurią supa sąrašas. The ['{stulpelis:vertė,...}',.... ] yra formatas, kurį grąžina ši funkcija. Čia kiekviena eilutė iš PySpark DataFrame grąžinama kaip žodynas su stulpelio pavadinimu kaip raktas.

Sintaksė:

dataframe_object.toJSON()

Gali būti įmanoma perduoti tokius parametrus kaip indeksas, stulpelių etiketės ir duomenų tipas.

Pavyzdys:

Sukurkite „skills_df“ PySpark DataFrame su 5 eilutėmis ir 4 stulpeliais. Konvertuokite šį „DataFrame“ į JSON naudodami metodą toJSON().

importuoti pyspark

iš pyspark.sql importuoti SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Linux patarimas“ ).getOrCreate()

# įgūdžių duomenys su 5 eilutėmis ir 4 stulpeliais

įgūdžiai =[{ 'id' : 123 , 'asmuo' : 'Medus' , 'įgūdžiai' : 'tapyba' , 'prizas' : 25 000 },

{ 'id' : 112 , 'asmuo' : 'Mouni' , 'įgūdžiai' : 'muzika/šokis' , 'prizas' : 2000 m },

{ 'id' : 153 , 'asmuo' : 'Tulasi' , 'įgūdžiai' : 'skaitymas' , 'prizas' : 1200 },

{ 'id' : 173 , 'asmuo' : 'bėgo' , 'įgūdžiai' : 'muzika' , 'prizas' : 2000 m },

{ 'id' : 43 , 'asmuo' : 'Kamala' , 'įgūdžiai' : 'skaitymas' , 'prizas' : 10 000 }

]

# sukurkite įgūdžių duomenų rėmelį iš aukščiau pateiktų duomenų

skill_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiniai įgūdžių duomenys

skill_df.show()

# Konvertuoti į JSON masyvą

json_skills_data = įgūdžiai_df.toJSON().collect()

print (json_skills_data)

Išvestis:

+---+------+-----+-----------+

| id|asmuo|prizas| įgūdis|

+---+------+-----+-----------+

| 123 | Medus| 25 000 | tapyba|

| 112 | Mouni| 2000 m |muzika/šokis|

| 153 |Tulasi| 1200 | skaitymas|

| 173 | Bėga| 2000 m | muzika|

| 43 |Kamala| 10 000 | skaitymas|

+---+------+-----+-----------+

[ '{'id':123,'person':'Honey','prize':25000,'skill':'painting'}' , '{'id':112,'person':'Mouni','prize':2000,'skill':'muzika/šokis'}' , '{'id':153,'person':'Tulasi','prize':1200,'skill':'skaityti'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'muzika'}' , '{'id':43,'person':'Kamala','prizas':10000,'skill':'skaityti'}' ]

PySpark DataFrame yra 5 eilutės. Visos šios 5 eilutės pateikiamos kaip eilučių, atskirtų kableliais, žodynas.

PySpark DataFrame į JSON naudojant Write.json()

Write.json() metodas pasiekiamas PySpark, kuris įrašo / išsaugo PySpark DataFrame JSON faile. Kaip parametras naudojamas failo pavadinimas / kelias. Iš esmės jis grąžina JSON keliuose failuose (suskirstytuose failuose). Norėdami juos visus sujungti į vieną failą, galime naudoti coalesce() metodą.

Sintaksė:

dataframe_object.coalesce( 1 ).write.json('failo_pavadinimas')
  1. Pridėti režimas – dataframe_object.write.mode('pridėti').json('failo_pavadinimas')
  2. Perrašymo režimas – dataframe_object.write.mode('perrašyti').json('failo_pavadinimas')

Gali būti įmanoma pridėti / perrašyti esamą JSON. Naudodami write.mode (), galime pridėti duomenis perduodami „pridėti“ arba perrašyti esamus JSON duomenis, perduodami „overwrite“ šiai funkcijai.

1 pavyzdys:

Sukurkite „skills_df“ PySpark DataFrame su 3 eilėmis ir 4 stulpeliais. Įrašykite šį duomenų rėmelį į JSON.

importuoti pyspark

importuoti pandas

iš pyspark.sql importuoti SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Linux patarimas“ ).getOrCreate()

# įgūdžių duomenys su 3 eilutėmis ir 4 stulpeliais

įgūdžiai =[{ 'id' : 123 , 'asmuo' : 'Medus' , 'įgūdžiai' : 'tapyba' , 'prizas' : 25 000 },

{ 'id' : 112 , 'asmuo' : 'Mouni' , 'įgūdžiai' : 'šokis' , 'prizas' : 2000 m },

{ 'id' : 153 , 'asmuo' : 'Tulasi' , 'įgūdžiai' : 'skaitymas' , 'prizas' : 1200 }

]

# sukurkite įgūdžių duomenų rėmelį iš aukščiau pateiktų duomenų

skill_df = linuxhint_spark_app.createDataFrame(skills)

# write.json()

skill_df.coalesce( 1 ).write.json( „skills_data“ )

JSON failas:

Matome, kad aplanke skill_data yra suskaidyti JSON duomenys.

Atidarykime JSON failą. Matome, kad visos „PySpark DataFrame“ eilutės konvertuojamos į JSON.

PySpark DataFrame yra 5 eilutės. Visos šios 5 eilutės pateikiamos kaip eilučių, atskirtų kableliais, žodynas.

2 pavyzdys:

Sukurkite „skills2_df“ PySpark DataFrame su viena eilute. Pridėkite vieną eilutę prie ankstesnio JSON failo, nurodydami režimą kaip „pridėti“.

importuoti pyspark

importuoti pandas

iš pyspark.sql importuoti SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Linux patarimas“ ).getOrCreate()

įgūdžiai2 =[{ 'id' : 78 , 'asmuo' : 'Marija' , 'įgūdžiai' : 'Jodinėjimas' , 'prizas' : 8960 }

]

# sukurkite įgūdžių duomenų rėmelį iš aukščiau pateiktų duomenų

skill2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() su pridėjimo režimu.

skill2_df.write.mode( 'pridėti' .json( „skills_data“ )

JSON failas:

Matome suskirstytus JSON failus. Pirmajame faile yra pirmieji „DataFrame“ įrašai, o antrajame – antrasis „DataFrame“ įrašas.

Išvada

Yra trys skirtingi būdai konvertuoti PySpark DataFrame į JSON. Pirmiausia aptarėme metodą to_json (), kuris konvertuoja į JSON konvertuojant PySpark DataFrame į Pandas DataFrame su skirtingais pavyzdžiais, atsižvelgiant į skirtingus parametrus. Tada panaudojome toJSON() metodą. Galiausiai sužinojome, kaip naudoti funkciją write.json() norint įrašyti PySpark DataFrame į JSON. Su šia funkcija galima pridėti ir perrašyti.