Sisällön aihe:
- PySpark DataFrame JSONiin käyttämällä To_json():ta yhdessä ToPandas()
- PySpark DataFrame JSONiin käyttämällä ToJSON()
- PySpark DataFrame JSONiin Write.json()
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,...)
- Orientia käytetään muunnetun JSONin näyttämiseen halutussa muodossa. Se vaatii 'tietueita', 'taulukkoa', 'arvoja', 'sarakkeita', 'indeksiä', 'jakoa'.
- 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 pysparktuonti 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=Truejson_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 pysparkpyspark.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')- Liitä tila – dataframe_object.write.mode('apppend').json('tiedoston_nimi')
- 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 pysparktuonti 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 pysparktuonti 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.