PySpark DataFramen muuntaminen JSON-muotoon

Pyspark Dataframen Muuntaminen Json Muotoon



Strukturoidun datan lähettäminen JSON:n avulla on mahdollista ja myös kuluttaa vähän muistia. PySpark RDD:hen tai PySpark DataFrameen verrattuna JSON kuluttaa vähän muistia ja sarjoitusta, mikä on mahdollista JSON:n kanssa. PySpark DataFrame voidaan muuntaa JSON-muotoon käyttämällä pyspark.sql.DataFrameWriter.json()-menetelmää. Sen lisäksi on kaksi muuta tapaa muuntaa DataFrame JSON-muotoon.

Sisällön aihe:

Tarkastellaan yksinkertaista PySpark DataFrame -kehystä kaikissa esimerkeissä ja muunnetaan se JSONiksi käyttämällä mainittuja toimintoja.







Vaadittu moduuli:

Asenna PySpark-kirjasto ympäristöösi, jos sitä ei ole vielä asennettu. Voit katsoa seuraavaa komentoa asentaaksesi sen:



pip asennus pyspark

PySpark DataFrame JSONiin käyttämällä To_json():ta yhdessä ToPandas()

To_json()-menetelmä on käytettävissä Pandas-moduulissa, joka muuntaa Pandas DataFramen JSON-muotoon. Voimme hyödyntää tätä menetelmää, jos muunnamme PySpark DataFrame -kehyksen Pandas DataFrameksi. PySpark DataFramen muuntamiseen Pandas DataFrameksi käytetään toPandas()-menetelmää. Katsotaanpa to_json():n syntaksia ja sen parametreja.



Syntaksi:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Orientia käytetään muunnetun JSONin näyttämiseen halutussa muodossa. Se vaatii 'tietueita', 'taulukkoa', 'arvoja', 'sarakkeita', 'indeksiä', 'jakoa'.
  2. Indeksiä käytetään indeksin sisällyttämiseen/poistamiseen muunnetusta JSON-merkkijonosta. Jos se on asetettu arvoon 'True', indeksit näytetään. Muuten indeksejä ei näytetä, jos suunta on 'jaettu' tai 'taulukko'.

Esimerkki 1: Suuntaa 'tietueina'

Luo 'skills_df' PySpark DataFrame, jossa on 3 riviä ja 4 saraketta. Muunna tämä DataFrame JSON-muotoon määrittämällä orientaatioparametri 'tietueiksi'.

tuonti pyspark

tuonti pandat

pyspark.sql-tiedostosta tuo SparkSession

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

# taitotiedot, joissa on 3 riviä ja 4 saraketta

taidot =[{ 'id' : 123 , 'henkilö' : 'Hunaja' , 'taito' : 'maalaus' , 'palkinto' : 25 000 },

{ 'id' : 112 , 'henkilö' : 'Mouni' , 'taito' : 'tanssi' , 'palkinto' : 2000 },

{ 'id' : 153 , 'henkilö' : 'Tulasi' , 'taito' : 'lukeminen' , 'palkinto' : 1200 }

]

# luo taitojen tietokehys yllä olevista tiedoista

skill_df = linuxhint_spark_app.createDataFrame(skills)

# Todelliset taidot

skill_df.show()

# Muunna JSON-muotoon käyttämällä to_json()-komentoa orientaatiolla 'tietueina'

json_skills_data = taidot_df.toPandas().to_json(orient= 'ennätykset' )

tulosta (json_skills_data)

Lähtö:



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

| id|henkilö|palkinto| taito|

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

| 123 | Kulta| 25 000 |maalaus|

| 112 | Mouni| 2000 | tanssi|

| 153 |Tulasi| 1200 | lukeminen|

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

[{ 'id' : 123 , 'henkilö' : 'Hunaja' , 'palkinto' : 25 000 , 'taito' : 'maalaus' },{ 'id' : 112 , 'henkilö' : 'Mouni' , 'palkinto' : 2000 , 'taito' : 'tanssi' },{ 'id' : 153 , 'henkilö' : 'Tulasi' , 'palkinto' : 1200 , 'taito' : 'lukeminen' }]

Näemme, että PySpark DataFrame muunnetaan JSON-taulukkoon arvosanakirjan avulla. Tässä avaimet edustavat sarakkeen nimeä ja arvo edustavat rivin/solun arvoa PySpark DataFrame -kehyksessä.

Esimerkki 2: Suuntaa 'jakamalla'

Jaetun suuntauksen palauttama JSON-muoto sisältää sarakkeiden nimet, joissa on sarakeluettelo, hakemistoluettelo ja tietoluettelo. Seuraava on 'jaetun' suuntauksen muoto.

# Muunna JSON-muotoon käyttämällä to_json()-komentoa orientaatiolla 'jaettu'

json_skills_data = taidot_df.toPandas().to_json(orient= 'jakaa' )

tulosta (json_skills_data)

Lähtö:

{ 'pylväät' :[ 'id' , 'henkilö' , 'palkinto' , 'taito' ], 'indeksi' :[ 0 , 1 , 2 ], 'data' :[[ 123 , 'Hunaja' , 25 000 , 'maalaus' ],[ 112 , 'Mouni' , 2000 , 'tanssi' ],[ 153 , 'Tulasi' , 1200 , 'lukeminen' ]]}

Esimerkki 3: Suuntaa hakemistona

Täällä jokainen PySpark DataFramen rivi poistetaan sanakirjan muodossa, jonka sarakkeen nimenä on avain. Jokaisen sanakirjan hakemistopaikka on määritetty avaimeksi.

# Muunna JSON-muotoon käyttämällä to_json()-komentoa orientaatiolla 'index'

json_skills_data = taidot_df.toPandas().to_json(orient= 'indeksi' )

tulosta (json_skills_data)

Lähtö:

{ '0' :{ 'id' : 123 , 'henkilö' : 'Hunaja' , 'palkinto' : 25 000 , 'taito' : 'maalaus' }, '1' :{ 'id' : 112 , 'henkilö' : 'Mouni' , 'palkinto' : 2000 , 'taito' : 'tanssi' }, '2' :{ 'id' : 153 , 'henkilö' : 'Tulasi' , 'palkinto' : 1200 , 'taito' : 'lukeminen' }}

Esimerkki 4: Suuntaa sarakkeina

Sarakkeet ovat jokaisen tietueen avain. Jokaisessa sarakkeessa on sanakirja, joka ottaa sarakkeen arvot indeksinumeroineen.

# Muunna JSON-muotoon käyttämällä to_json()-komentoa orientaatiolla sarakkeina

json_skills_data = taidot_df.toPandas().to_json(orient= 'pylväät' )

tulosta (json_skills_data)

Lähtö:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'henkilö' :{ '0' : 'Hunaja' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'palkinto' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'taito' :{ '0' : 'maalaus' , '1' : 'tanssi' , '2' : 'lukeminen' }}

Esimerkki 5: Suuntaa arvoiksi

Jos tarvitset vain JSON-arvoja, voit valita 'arvot'. Se näyttää jokaisen rivin luettelossa. Lopuksi kaikki luettelot tallennetaan luetteloon. Tämä JSON on sisäkkäisluettelotyyppiä.

# Muunna JSON-muotoon käyttämällä to_json():ta orientilla arvoina

json_skills_data = taidot_df.toPandas().to_json(orient= 'arvot' )

tulosta (json_skills_data)

Lähtö:

[[ 123 , 'Hunaja' , 25 000 , 'maalaus' ],[ 112 , 'Mouni' , 2000 , 'tanssi' ],[ 153 , 'Tulasi' , 1200 , 'lukeminen' ]]

Esimerkki 6: Suuntaa 'taulukkona'

'Taulukko'-suunta palauttaa JSON-tiedoston, joka sisältää skeeman kenttien nimillä sekä saraketietotyypit, indeksin ensisijaisena avaimena ja Pandas-version. Sarakkeiden nimet arvoineen näytetään 'datana'.

# Muunna JSON-muotoon käyttämällä to_json()-komentoa orientaatiolla 'taulukkona'

json_skills_data = taidot_df.toPandas().to_json(orient= 'pöytä' )

tulosta (json_skills_data)

Lähtö:

{ 'skeema' :{ 'pellot' :[{ 'nimi' : 'indeksi' , 'tyyppi' : 'kokonaisluku' },{ 'nimi' : 'id' , 'tyyppi' : 'kokonaisluku' },{ 'nimi' : 'henkilö' , 'tyyppi' : 'merkkijono' },{ 'nimi' : 'palkinto' , 'tyyppi' : 'kokonaisluku' },{ 'nimi' : 'taito' , 'tyyppi' : 'merkkijono' }], 'pääavain' :[ 'indeksi' ], 'pandas_versio' : '1.4.0' }, 'data' :[{ 'indeksi' : 0 , 'id' : 123 , 'henkilö' : 'Hunaja' , 'palkinto' : 25 000 , 'taito' : 'maalaus' },{ 'indeksi' : 1 , 'id' : 112 , 'henkilö' : 'Mouni' , 'palkinto' : 2000 , 'taito' : 'tanssi' },{ 'indeksi' : 2 , 'id' : 153 , 'henkilö' : 'Tulasi' , 'palkinto' : 1200 , 'taito' : 'lukeminen' }]}

Esimerkki 7: Indeksiparametrilla

Ensin välitämme indeksiparametrin asettamalla sen arvoon 'True'. Näet jokaisen sarakkeen arvon kohdalla, että indeksipaikka palautetaan avaimena sanakirjassa.

Toisessa lähdössä vain sarakkeiden nimet ('sarakkeet') ja tietueet ('data') palautetaan ilman indeksin paikkoja, koska indeksin arvoksi on asetettu 'False'.

# Muunna JSON-muotoon käyttämällä to_json()-komentoa, jossa index=True

json_skills_data = taidot_df.toPandas().to_json(index=True)

print(json_skills_data, ' \n ' )

# Muunna JSONiksi komennolla to_json() komennolla index=False

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

tulosta (json_skills_data)

Lähtö:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'henkilö' :{ '0' : 'Hunaja' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'palkinto' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'taito' :{ '0' : 'maalaus' , '1' : 'tanssi' , '2' : 'lukeminen' }}

{ 'pylväät' :[ 'id' , 'henkilö' , 'palkinto' , 'taito' ], 'data' :[[ 123 , 'Hunaja' , 25 000 , 'maalaus' ],[ 112 , 'Mouni' , 2000 , 'tanssi' ],[ 153 , 'Tulasi' , 1200 , 'lukeminen' ]]

PySpark DataFrame JSONiin käyttämällä ToJSON()

ToJSON()-menetelmää käytetään PySpark DataFramen muuntamiseen JSON-objektiksi. Pohjimmiltaan se palauttaa JSON-merkkijonon, jota ympäröi luettelo. The ['{column:value,…}',…. ] on tämän funktion palauttama muoto. Tässä jokainen PySpark DataFramen rivi palautetaan sanakirjana, jonka avaimena on sarakkeen nimi.

Syntaksi:

dataframe_object.toJSON()

Parametreja, kuten indeksi, sarakeotsikot ja tietotyyppi, voi olla mahdollista välittää.

Esimerkki:

Luo 'skills_df' PySpark DataFrame, jossa on 5 riviä ja 4 saraketta. Muunna tämä DataFrame JSON-muotoon käyttämällä toJSON()-menetelmää.

tuonti pyspark

pyspark.sql-tiedostosta tuo SparkSession

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

# taitotiedot 5 rivillä ja 4 sarakkeella

taidot =[{ 'id' : 123 , 'henkilö' : 'Hunaja' , 'taito' : 'maalaus' , 'palkinto' : 25 000 },

{ 'id' : 112 , 'henkilö' : 'Mouni' , 'taito' : 'musiikki/tanssi' , 'palkinto' : 2000 },

{ 'id' : 153 , 'henkilö' : 'Tulasi' , 'taito' : 'lukeminen' , 'palkinto' : 1200 },

{ 'id' : 173 , 'henkilö' : 'juoksu' , 'taito' : 'musiikki' , 'palkinto' : 2000 },

{ 'id' : 43 , 'henkilö' : 'Kamala' , 'taito' : 'lukeminen' , 'palkinto' : 10 000 }

]

# luo taitojen tietokehys yllä olevista tiedoista

skill_df = linuxhint_spark_app.createDataFrame(skills)

# Todelliset taidot

skill_df.show()

# Muunna JSON-taulukkoon

json_skills_data = taidot_df.toJSON().collect()

tulosta (json_skills_data)

Lähtö:

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

| id|henkilö|palkinto| taito|

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

| 123 | Kulta| 25 000 | maalaus|

| 112 | Mouni| 2000 |musiikki/tanssi|

| 153 |Tulasi| 1200 | lukeminen|

| 173 | Juoksi| 2000 | musiikki|

| 43 |Kamala| 10 000 | lukeminen|

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

[ '{'id':123,'person':'Honey','palkinto':25000,'taito':'maalaus'}' , '{'id':112,'person':'Mouni','palkinto':2000,'taito':'musiikki/tanssi'}' , '{'id':153,'person':'Tulasi','palkinto':1200,'taito':'luku'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'musiikki'}' , '{'id':43,'person':'Kamala','palkinto':10000,'taito':'lukeminen'}' ]

PySpark DataFrame -kehyksessä on 5 riviä. Kaikki nämä 5 riviä palautetaan sanakirjana merkkijonoista, jotka erotetaan pilkulla.

PySpark DataFrame JSONiin Write.json()

Write.json()-menetelmä on käytettävissä PySparkissa, joka kirjoittaa/tallentaa PySpark DataFramen JSON-tiedostoon. Se ottaa tiedoston nimen/polun parametrina. Pohjimmiltaan se palauttaa JSONin useissa tiedostoissa (osioiduissa tiedostoissa). Jos haluat yhdistää ne kaikki yhdeksi tiedostoksi, voimme käyttää coalesce()-menetelmää.

Syntaksi:

dataframe_object.coalesce( 1 ).write.json('tiedoston_nimi')
  1. Liitä tila – dataframe_object.write.mode('apppend').json('tiedoston_nimi')
  2. Korvaustila – dataframe_object.write.mode('overwrite').json('tiedoston_nimi')

Voi olla mahdollista liittää / korvata olemassa oleva JSON. Write.mode()-toiminnolla voimme liittää tiedot ohittamalla 'append' tai korvata olemassa olevat JSON-tiedot välittämällä 'overwrite' tälle funktiolle.

Esimerkki 1:

Luo 'skills_df' PySpark DataFrame, jossa on 3 riviä ja 4 saraketta. Kirjoita tämä DataFrame JSONiin.

tuonti pyspark

tuonti pandat

pyspark.sql-tiedostosta tuo SparkSession

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

# taitotiedot, joissa on 3 riviä ja 4 saraketta

taidot =[{ 'id' : 123 , 'henkilö' : 'Hunaja' , 'taito' : 'maalaus' , 'palkinto' : 25 000 },

{ 'id' : 112 , 'henkilö' : 'Mouni' , 'taito' : 'tanssi' , 'palkinto' : 2000 },

{ 'id' : 153 , 'henkilö' : 'Tulasi' , 'taito' : 'lukeminen' , 'palkinto' : 1200 }

]

# luo taitojen tietokehys yllä olevista tiedoista

skill_df = linuxhint_spark_app.createDataFrame(skills)

# write.json()

skill_df.coalesce( 1 ).write.json( 'skills_data' )

JSON-tiedosto:

Näemme, että skill_data-kansio sisältää osioidut JSON-tiedot.

Avataan JSON-tiedosto. Näemme, että kaikki PySpark DataFramen rivit muunnetaan JSONiksi.

PySpark DataFrame -kehyksessä on 5 riviä. Kaikki nämä 5 riviä palautetaan sanakirjana merkkijonoista, jotka erotetaan pilkulla.

Esimerkki 2:

Luo 'skills2_df' PySpark DataFrame yhdellä rivillä. Liitä yksi rivi edelliseen JSON-tiedostoon määrittämällä tilaksi 'liitä'.

tuonti pyspark

tuonti pandat

pyspark.sql-tiedostosta tuo SparkSession

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

taidot2 =[{ 'id' : 78 , 'henkilö' : 'Maria' , 'taito' : 'ratsastus' , 'palkinto' : 8960 }

]

# luo taitojen tietokehys yllä olevista tiedoista

skill2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() lisäystilassa.

skill2_df.write.mode( 'liitä' ).json( 'skills_data' )

JSON-tiedosto:

Näemme osioidut JSON-tiedostot. Ensimmäinen tiedosto sisältää ensimmäiset DataFrame-tietueet ja toinen tiedosto toisen DataFrame-tietueen.

Johtopäätös

PySpark DataFrame voidaan muuntaa JSON-muotoon kolmella eri tavalla. Ensin käsittelimme to_json()-menetelmää, joka muuntaa JSON-muotoon muuntamalla PySpark DataFrame -kehyksen Pandas DataFrame -kehykseksi erilaisilla esimerkeillä ottaen huomioon eri parametrit. Seuraavaksi käytimme toJSON()-menetelmää. Lopuksi opimme käyttämään write.json()-funktiota PySpark DataFramen kirjoittamiseen JSONiin. Liittäminen ja päällekirjoitus ovat mahdollisia tällä toiminnolla.