PySpark DataFrame'i teisendamine JSON-iks

Pyspark Dataframe I Teisendamine Json Iks



Struktureeritud andmete edastamine JSON-i abil on võimalik ja kulutab ka vähe mälu. Võrreldes PySpark RDD või PySpark DataFrame'iga kulutab JSON vähe mälu ja serialiseerimist, mis on JSON-iga võimalik. Me saame PySpark DataFrame'i teisendada JSON-iks, kasutades meetodit pyspark.sql.DataFrameWriter.json(). Peale selle on DataFrame'i JSON-iks teisendamiseks veel kaks võimalust.

Sisu teema:

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,...)
  1. Orienti kasutatakse teisendatud JSON-i kuvamiseks soovitud vormingus. See võtab 'kirjed', 'tabel', 'väärtused', 'veerud', 'indeks', 'jaotatud'.
  2. 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 pyspark

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

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

pyspark.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')
  1. Lisarežiim – dataframe_object.write.mode('append').json('faili_nimi')
  2. Ü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 pyspark

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

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