Sisu teema:
- PySpark DataFrame JSON-i kasutades To_json() koos ToPandas()
- PySpark DataFrame JSON-iks, kasutades ToJSON()
- PySpark DataFrame JSON-iks Write.json() abil
Vaatleme kõigis näidetes lihtsat PySpark DataFrame'i ja teisendame selle nimetatud funktsioonide abil JSON-iks.
Nõutav moodul:
Installige PySparki teek oma keskkonda, kui see pole veel installitud. Selle installimiseks võite viidata järgmisele käsule:
pip install pyspark
PySpark DataFrame JSON-i kasutades To_json() koos ToPandas()
Meetod to_json() on saadaval Pandase moodulis, mis teisendab Panda DataFrame'i JSON-iks. Saame seda meetodit kasutada, kui teisendame oma PySpark DataFrame'i Pandas DataFrame'iks. PySpark DataFrame'i teisendamiseks Pandas DataFrame'iks kasutatakse meetodit toPandas(). Vaatame faili to_json() süntaksit koos selle parameetritega.
Süntaks:
dataframe_object.toPandas().to_json(orient,index,...)
- Orienti kasutatakse teisendatud JSON-i kuvamiseks soovitud vormingus. See võtab 'kirjed', 'tabel', 'väärtused', 'veerud', 'indeks', 'jaotatud'.
- Indeksit kasutatakse indeksi kaasamiseks/eemaldamiseks konverteeritud JSON-stringist. Kui see on seatud väärtusele 'True', kuvatakse indeksid. Vastasel juhul indekseid ei kuvata, kui orientatsioon on 'jagatud' või 'tabel'.
Näide 1: Orienteerige kirjetena
Looge „skills_df” PySpark DataFrame, millel on 3 rida ja 4 veergu. Teisendage see DataFrame JSON-iks, määrates orientiiri parameetriks 'kirjed'.
import pysparkimport pandad
pyspark.sql-st importige SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
# oskuste andmed 3 rea ja 4 veeruga
oskused =[{ 'id' : 123 , 'inimene' : 'Kallis' , 'oskus' : 'maalimine' , 'auhind' : 25 000 },
{ 'id' : 112 , 'inimene' : 'Mouni' , 'oskus' : 'tants' , 'auhind' : 2000 },
{ 'id' : 153 , 'inimene' : 'Tulasi' , 'oskus' : 'lugemine' , 'auhind' : 1200 }
]
# looge ülaltoodud andmete põhjal oskuste andmeraamistik
oskused_df = linuxhint_spark_app.createDataFrame(skills)
# Tegelikud oskuste andmed
oskused_df.show()
# Teisendage JSON-iks, kasutades to_json() orientatsiooniga kirjetena
json_skills_data = oskused_df.toPandas().to_json(orient= 'plaadid' )
print(json_skills_data)
Väljund:
+---+------+-----+--------+
| id|inimene|auhind| oskus|
+---+------+-----+--------+
| 123 | Kallis| 25 000 |maalimine|
| 112 | Mouni| 2000 | tants|
| 153 |Tulasi| 1200 | lugemine|
+---+------+-----+--------+
[{ 'id' : 123 , 'inimene' : 'Kallis' , 'auhind' : 25 000 , 'oskus' : 'maal' },{ 'id' : 112 , 'inimene' : 'Mouni' , 'auhind' : 2000 , 'oskus' : 'tants' },{ 'id' : 153 , 'inimene' : 'Tulasi' , 'auhind' : 1200 , 'oskus' : 'lugemine' }]
Näeme, et PySpark DataFrame teisendatakse väärtuste sõnastiku abil JSON-massiiviks. Siin tähistavad võtmed veeru nime ja väärtus PySpark DataFrame'i rea/lahtri väärtust.
Näide 2: Orienteerige 'Jagatuna'
JSON-vorming, mille „jagatud” orientatsioon tagastab, sisaldab veergude nimesid, millel on veergude loend, indeksi loend ja andmete loend. Järgmine on 'lõigatud' orientatsiooni vorming.
# Teisendage JSON-iks, kasutades to_json() koos orientatsiooniga 'split'
json_skills_data = oskused_df.toPandas().to_json(orient= 'lõhestatud' )
print(json_skills_data)
Väljund:
{ 'veerud' :[ 'id' , 'inimene' , 'auhind' , 'oskus' ], 'indeks' :[ 0 , 1 , 2 ], 'andmed' :[[ 123 , 'Kallis' , 25 000 , 'maal' ],[ 112 , 'Mouni' , 2000 , 'tants' ],[ 153 , 'Tulasi' , 1200 , 'lugemine' ]]}Näide 3: Orienteerige indeksina
Siin eemaldatakse iga PySpark DataFrame'i rida sõnastiku kujul, mille veeru nimeks on võti. Iga sõnastiku jaoks on indeksi asukoht määratud võtmena.
# Teisendage JSON-iks, kasutades to_json() koos orientatsiooniga 'indeks'
json_skills_data = oskused_df.toPandas().to_json(orient= 'indeks' )
print(json_skills_data)
Väljund:
{ '0' :{ 'id' : 123 , 'inimene' : 'Kallis' , 'auhind' : 25 000 , 'oskus' : 'maal' }, '1' :{ 'id' : 112 , 'inimene' : 'Mouni' , 'auhind' : 2000 , 'oskus' : 'tants' }, '2' :{ 'id' : 153 , 'inimene' : 'Tulasi' , 'auhind' : 1200 , 'oskus' : 'lugemine' }}Näide 4: Orienteerige veergudena
Veerud on iga kirje võti. Igas veerus on sõnastik, mis võtab veergude väärtused koos indeksinumbritega.
# Teisendage JSON-iks, kasutades to_json() orientatsiooniga veergudena
json_skills_data = oskused_df.toPandas().to_json(orient= 'veerud' )
print(json_skills_data)
Väljund:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'inimene' :{ '0' : 'Kallis' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'auhind' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'oskus' :{ '0' : 'maal' , '1' : 'tants' , '2' : 'lugemine' }}Näide 5: Orienteerige väärtustena
Kui vajate ainult JSON-i väärtusi, võite valida „väärtuste” orientatsiooni. See kuvab iga rida loendis. Lõpuks salvestatakse kõik loendid loendisse. See JSON on pesastatud loendi tüüpi.
# Teisendage JSON-iks, kasutades to_json() orientatsiooniga väärtustena
json_skills_data = oskused_df.toPandas().to_json(orient= 'väärtused' )
print(json_skills_data)
Väljund:
[[ 123 , 'Kallis' , 25 000 , 'maal' ],[ 112 , 'Mouni' , 2000 , 'tants' ],[ 153 , 'Tulasi' , 1200 , 'lugemine' ]]Näide 6: Orienteerige 'tabelina'
Tabeliorientatsioon tagastab JSON-i, mis sisaldab väljanimede skeemi koos veergude andmetüüpidega, indeksi kui primaarvõtme ja Pandase versiooni. Veergude nimed koos väärtustega kuvatakse kui 'andmed'.
# Teisendage JSON-iks, kasutades to_json() orientatsiooniga 'tabelina'
json_skills_data = oskused_df.toPandas().to_json(orient= 'laud' )
print(json_skills_data)
Väljund:
{ 'skeem' :{ 'väljad' :[{ 'nimi' : 'indeks' , 'tüüp' : 'täisarv' },{ 'nimi' : 'id' , 'tüüp' : 'täisarv' },{ 'nimi' : 'inimene' , 'tüüp' : 'string' },{ 'nimi' : 'auhind' , 'tüüp' : 'täisarv' },{ 'nimi' : 'oskus' , 'tüüp' : 'string' }], 'primaryKey' :[ 'indeks' ], 'panda_versioon' : '1.4.0' }, 'andmed' :[{ 'indeks' : 0 , 'id' : 123 , 'inimene' : 'Kallis' , 'auhind' : 25 000 , 'oskus' : 'maal' },{ 'indeks' : 1 , 'id' : 112 , 'inimene' : 'Mouni' , 'auhind' : 2000 , 'oskus' : 'tants' },{ 'indeks' : 2 , 'id' : 153 , 'inimene' : 'Tulasi' , 'auhind' : 1200 , 'oskus' : 'lugemine' }]}Näide 7: Indeksi parameetriga
Esiteks edastame indeksi parameetri, määrates selle väärtuseks 'True'. Iga veeru väärtuse puhul näete, et indeksi positsioon tagastatakse sõnaraamatu võtmena.
Teises väljundis tagastatakse ainult veergude nimed ('veerud') ja kirjed ('andmed') ilma indeksi positsioonideta, kuna indeks on seatud väärtusele 'False'.
# Teisendage JSON-iks, kasutades to_json() koos index=Truejson_skills_data = oskused_df.toPandas().to_json(index=True)
print(json_skills_data, ' \n ' )
# Teisendage JSON-iks, kasutades to_json() koos index=False
json_skills_data= oskused_df.toPandas().to_json(index=False,orient= 'lõhestatud' )
print(json_skills_data)
Väljund:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'inimene' :{ '0' : 'Kallis' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'auhind' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'oskus' :{ '0' : 'maal' , '1' : 'tants' , '2' : 'lugemine' }}{ 'veerud' :[ 'id' , 'inimene' , 'auhind' , 'oskus' ], 'andmed' :[[ 123 , 'Kallis' , 25 000 , 'maal' ],[ 112 , 'Mouni' , 2000 , 'tants' ],[ 153 , 'Tulasi' , 1200 , 'lugemine' ]]
PySpark DataFrame JSON-iks, kasutades ToJSON()
Meetodit toJSON() kasutatakse PySpark DataFrame'i teisendamiseks JSON-objektiks. Põhimõtteliselt tagastab see JSON-stringi, mis on ümbritsetud loendiga. The ['{veerg:väärtus,…}',…. ] on vorming, mille see funktsioon tagastab. Siin tagastatakse PySpark DataFrame'i iga rida sõnaraamatuna, mille võtmeks on veeru nimi.
Süntaks:
dataframe_object.toJSON()Võimalik on edastada selliseid parameetreid nagu register, veerusildid ja andmetüüp.
Näide:
Looge 'skills_df' PySpark DataFrame, millel on 5 rida ja 4 veergu. Teisendage see DataFrame JSON-iks, kasutades meetodit toJSON().
import pysparkpyspark.sql-st importige SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
# oskuste andmed 5 rea ja 4 veeruga
oskused =[{ 'id' : 123 , 'inimene' : 'Kallis' , 'oskus' : 'maalimine' , 'auhind' : 25 000 },
{ 'id' : 112 , 'inimene' : 'Mouni' , 'oskus' : 'muusika/tants' , 'auhind' : 2000 },
{ 'id' : 153 , 'inimene' : 'Tulasi' , 'oskus' : 'lugemine' , 'auhind' : 1200 },
{ 'id' : 173 , 'inimene' : 'jooksnud' , 'oskus' : 'muusika' , 'auhind' : 2000 },
{ 'id' : 43 , 'inimene' : 'Kamala' , 'oskus' : 'lugemine' , 'auhind' : 10 000 }
]
# looge ülaltoodud andmete põhjal oskuste andmeraamistik
oskused_df = linuxhint_spark_app.createDataFrame(skills)
# Tegelikud oskuste andmed
oskused_df.show()
# Teisendage JSON-massiiviks
json_skills_data = oskused_df.toJSON().collect()
print(json_skills_data)
Väljund:
+---+------+-----+-----------+| id|inimene|auhind| oskus|
+---+------+-----+-----------+
| 123 | Kallis| 25 000 | maalimine|
| 112 | Mouni| 2000 |muusika/tants|
| 153 |Tulasi| 1200 | lugemine|
| 173 | Jooks| 2000 | muusika|
| 43 |Kamala| 10 000 | lugemine|
+---+------+-----+-----------+
[ '{'id':123,'person':'Kallis','auhind':25000,'oskus':'maalitöö'}' , '{'id':112,'person':'Mouni','auhind':2000,'oskus':'muusika/tants'}' , '{'id':153,'person':'Tulasi','auhind':1200,'oskus':'lugemine'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'muusika'}' , '{'id':43,'person':'Kamala','auhind':10000,'oskus':'lugemine'}' ]
PySpark DataFrame'is on 5 rida. Kõik need 5 rida tagastatakse komadega eraldatud stringide sõnastikus.
PySpark DataFrame JSON-iks Write.json() abil
Meetod write.json() on PySparkis saadaval, mis kirjutab/salvestab PySpark DataFrame'i JSON-faili. See võtab parameetrina faili nime/tee. Põhimõtteliselt tagastab see JSON-i mitmes failis (partitsioonitud failid). Nende kõigi ühte faili liitmiseks saame kasutada meetodit coalesce().
Süntaks:
dataframe_object.coalesce( 1 ).write.json('faili_nimi')- Lisarežiim – dataframe_object.write.mode('append').json('faili_nimi')
- Ülekirjutamise režiim – dataframe_object.write.mode('overwrite').json('faili_nimi')
Olemasoleva JSON-i võib olla võimalik lisada/üle kirjutada. Funktsiooni write.mode() abil saame lisada andmed, edastades käsu „append” või olemasolevad JSON-andmed üle kirjutada, andes sellele funktsioonile käsu „overwrite”.
Näide 1:
Looge „skills_df” PySpark DataFrame, millel on 3 rida ja 4 veergu. Kirjutage see DataFrame JSON-i.
import pysparkimport pandad
pyspark.sql-st importige SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
# oskuste andmed 3 rea ja 4 veeruga
oskused =[{ 'id' : 123 , 'inimene' : 'Kallis' , 'oskus' : 'maalimine' , 'auhind' : 25 000 },
{ 'id' : 112 , 'inimene' : 'Mouni' , 'oskus' : 'tants' , 'auhind' : 2000 },
{ 'id' : 153 , 'inimene' : 'Tulasi' , 'oskus' : 'lugemine' , 'auhind' : 1200 }
]
# looge ülaltoodud andmete põhjal oskuste andmeraamistik
oskused_df = linuxhint_spark_app.createDataFrame(skills)
# write.json()
oskused_df.coalesce( 1 ).write.json( 'oskuste_andmed' )
JSON-fail:
Näeme, et kaust skill_data sisaldab partitsioonitud JSON-andmeid.
Avame JSON-faili. Näeme, et kõik PySpark DataFrame'i read teisendatakse JSON-iks.
PySpark DataFrame'is on 5 rida. Kõik need 5 rida tagastatakse komadega eraldatud stringide sõnastikus.
Näide 2:
Looge ühe reaga PySpark DataFrame 'skills2_df'. Lisage eelmisele JSON-failile üks rida, määrates režiimiks 'lisa'.
import pysparkimport pandad
pyspark.sql-st importige SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
oskused2 =[{ 'id' : 78 , 'inimene' : 'Maarja' , 'oskus' : 'ratsutama' , 'auhind' : 8960 }
]
# looge ülaltoodud andmete põhjal oskuste andmeraamistik
oskused2_df = linuxhint_spark_app.createDataFrame(skills2)
# write.json() lisamisrežiimiga.
skill2_df.write.mode( 'lisa' .json( 'oskuste_andmed' )
JSON-fail:
Näeme partitsioonitud JSON-faile. Esimene fail sisaldab esimesi DataFrame'i kirjeid ja teine fail teist DataFrame'i kirjet.
Järeldus
PySpark DataFrame'i JSON-iks teisendamiseks on kolm erinevat viisi. Esiteks arutasime meetodit to_json(), mis teisendab JSON-iks, teisendades PySpark DataFrame'i Panda DataFrame'iks erinevate näidetega, võttes arvesse erinevaid parameetreid. Järgmisena kasutasime meetodit toJSON (). Lõpuks õppisime, kuidas kasutada funktsiooni write.json() PySpark DataFrame'i kirjutamiseks JSON-i. Selle funktsiooniga on võimalik lisada ja üle kirjutada.