PySpark DataFrame konvertēšana uz JSON

Pyspark Dataframe Konvertesana Uz Json



Strukturētu datu pārsūtīšana, izmantojot JSON, ir iespējama, kā arī patērē maz atmiņas. Salīdzinot ar PySpark RDD vai PySpark DataFrame, JSON patērē maz atmiņas un serializāciju, kas ir iespējama ar JSON. Mēs varam pārvērst PySpark DataFrame par JSON, izmantojot pyspark.sql.DataFrameWriter.json() metodi. Papildus tam ir divi citi veidi, kā pārveidot DataFrame uz JSON.

Satura tēma:

Visos piemēros aplūkosim vienkāršu PySpark DataFrame un pārveidosim to par JSON, izmantojot minētās funkcijas.







Nepieciešamais modulis:

Instalējiet PySpark bibliotēku savā vidē, ja tā vēl nav instalēta. Lai to instalētu, varat atsaukties uz šo komandu:



pip instalēt pyspark

PySpark DataFrame uz JSON, izmantojot To_json() ar ToPandas()

Metode to_json() ir pieejama Pandas modulī, kas pārvērš Pandas DataFrame par JSON. Mēs varam izmantot šo metodi, ja mēs pārvēršam savu PySpark DataFrame par Pandas DataFrame. Lai PySpark DataFrame pārveidotu par Pandas DataFrame, tiek izmantota metode toPandas(). Apskatīsim to_json () sintaksi kopā ar tā parametriem.



Sintakse:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Orient tiek izmantots, lai parādītu konvertēto JSON kā vēlamo formātu. Tas aizņem 'ierakstus', 'tabula', 'vērtības', 'kolonnas', 'indekss', 'sadalīts'.
  2. Indekss tiek izmantots, lai iekļautu/noņemtu indeksu no konvertētās JSON virknes. Ja tas ir iestatīts uz “True”, tiek parādīti indeksi. Pretējā gadījumā indeksi netiks parādīti, ja orientācija ir “sadalīta” vai “tabula”.

1. piemērs: orientējieties kā “ieraksti”

Izveidojiet “skills_df” PySpark DataFrame ar 3 rindām un 4 kolonnām. Konvertējiet šo DataFrame uz JSON, norādot orientācijas parametru kā “records”.

importēt pyspark

importēt pandas

no pyspark.sql importēt SparkSession

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

# prasmju dati ar 3 rindām un 4 kolonnām

prasmes =[{ 'id' : 123 , 'persona' : 'Mīļā' , 'prasme' : 'glezna' , 'balva' : 25 000 },

{ 'id' : 112 , 'persona' : 'Mouni' , 'prasme' : 'dejot' , 'balva' : 2000. gads },

{ 'id' : 153 , 'persona' : 'Tulasi' , 'prasme' : 'lasīšana' , 'balva' : 1200 }

]

# izveidojiet prasmju datu rāmi no iepriekšminētajiem datiem

Skills_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiskie prasmju dati

prasmes_df.show()

# Konvertējiet uz JSON, izmantojot to_json() ar orientāciju kā ierakstus

json_skills_data = prasmes_df.toPandas().to_json(orient= 'ieraksti' )

drukāt (json_skills_data)

Izvade:



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

| id|persona|balva| prasme|

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

| 123 | Medus| 25 000 |gleznošana|

| 112 | Mouni| 2000. gads | dejot|

| 153 |Tulasi| 1200 | lasīšana|

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

[{ 'id' : 123 , 'persona' : 'Mīļā' , 'balva' : 25 000 , 'prasme' : 'glezna' },{ 'id' : 112 , 'persona' : 'Mouni' , 'balva' : 2000. gads , 'prasme' : 'dejot' },{ 'id' : 153 , 'persona' : 'Tulasi' , 'balva' : 1200 , 'prasme' : 'lasīšana' }]

Mēs redzam, ka PySpark DataFrame tiek pārveidots par JSON masīvu ar vērtību vārdnīcu. Šeit atslēgas apzīmē kolonnas nosaukumu, un vērtība apzīmē rindas/šūnas vērtību PySpark DataFrame.

2. piemērs: orientējieties kā “Sadalīts”

JSON formātā, ko atgriež “sadalītā” orientācija, ir iekļauti kolonnu nosaukumi, kuriem ir kolonnu saraksts, indeksu saraksts un datu saraksts. Tālāk ir norādīts “sadalītās” orientācijas formāts.

# Konvertējiet uz JSON, izmantojot to_json() ar orientāciju kā 'sadalīt'

json_skills_data = prasmes_df.toPandas().to_json(orient= 'sadalīt' )

drukāt (json_skills_data)

Izvade:

{ 'kolonnas' :[ 'id' , 'persona' , 'balva' , 'prasme' ], 'indekss' :[ 0 , 1 , 2 ], 'dati' :[[ 123 , 'Mīļā' , 25 000 , 'glezna' ],[ 112 , 'Mouni' , 2000. gads , 'dejot' ],[ 153 , 'Tulasi' , 1200 , 'lasīšana' ]]}

3. piemērs: orientējieties kā 'indekss'

Šeit katra rinda no PySpark DataFrame tiek izņemta vārdnīcas veidā ar atslēgu kā kolonnas nosaukumu. Katrai vārdnīcai rādītāja pozīcija ir norādīta kā atslēga.

# Konvertējiet uz JSON, izmantojot to_json() ar orientāciju kā 'index'

json_skills_data = prasmes_df.toPandas().to_json(orient= 'indekss' )

drukāt (json_skills_data)

Izvade:

{ '0' :{ 'id' : 123 , 'persona' : 'Mīļā' , 'balva' : 25 000 , 'prasme' : 'glezna' }, '1' :{ 'id' : 112 , 'persona' : 'Mouni' , 'balva' : 2000. gads , 'prasme' : 'dejot' }, '2' :{ 'id' : 153 , 'persona' : 'Tulasi' , 'balva' : 1200 , 'prasme' : 'lasīšana' }}

4. piemērs: orientējieties kā 'kolonnas'

Kolonnas ir katra ieraksta atslēga. Katrā kolonnā ir vārdnīca, kurā tiek ņemtas kolonnu vērtības ar indeksu numuriem.

# Konvertējiet uz JSON, izmantojot to_json() ar orientāciju kā kolonnas

json_skills_data = prasmes_df.toPandas().to_json(orient= 'kolonnas' )

drukāt (json_skills_data)

Izvade:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'persona' :{ '0' : 'Mīļā' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'balva' :{ '0' : 25 000 , '1' : 2000. gads , '2' : 1200 }, 'prasme' :{ '0' : 'glezna' , '1' : 'dejot' , '2' : 'lasīšana' }}

5. piemērs: orientējieties kā “vērtības”

Ja jums ir nepieciešamas tikai JSON vērtības, varat izvēlēties “vērtību” orientāciju. Tas parāda katru rindu sarakstā. Visbeidzot, visi saraksti tiek saglabāti sarakstā. Šis JSON ir ligzdotā saraksta veids.

# Konvertējiet uz JSON, izmantojot to_json() ar orientāciju kā 'vērtības'

json_skills_data = prasmes_df.toPandas().to_json(orient= 'vērtības' )

drukāt (json_skills_data)

Izvade:

[[ 123 , 'Mīļā' , 25 000 , 'glezna' ],[ 112 , 'Mouni' , 2000. gads , 'dejot' ],[ 153 , 'Tulasi' , 1200 , 'lasīšana' ]]

6. piemērs: orientējieties kā “tabula”

“Tabulas” orientācija atgriež JSON, kas ietver shēmu ar lauku nosaukumiem, kā arī kolonnu datu tipiem, indeksu kā primāro atslēgu un Pandas versiju. Kolonnu nosaukumi ar vērtībām tiek parādīti kā “dati”.

# Konvertējiet uz JSON, izmantojot to_json() ar orientāciju kā 'tabula'

json_skills_data = prasmes_df.toPandas().to_json(orient= 'tabula' )

drukāt (json_skills_data)

Izvade:

{ 'shēma' :{ 'lauki' :[{ 'vārds' : 'indekss' , 'tips' : 'vesels skaitlis' },{ 'vārds' : 'id' , 'tips' : 'vesels skaitlis' },{ 'vārds' : 'persona' , 'tips' : 'string' },{ 'vārds' : 'balva' , 'tips' : 'vesels skaitlis' },{ 'vārds' : 'prasme' , 'tips' : 'string' }], 'primārā atslēga' :[ 'indekss' ], 'pandas_version' : '1.4.0' }, 'dati' :[{ 'indekss' : 0 , 'id' : 123 , 'persona' : 'Mīļā' , 'balva' : 25 000 , 'prasme' : 'glezna' },{ 'indekss' : 1 , 'id' : 112 , 'persona' : 'Mouni' , 'balva' : 2000. gads , 'prasme' : 'dejot' },{ 'indekss' : 2 , 'id' : 153 , 'persona' : 'Tulasi' , 'balva' : 1200 , 'prasme' : 'lasīšana' }]}

7. piemērs: ar indeksa parametru

Pirmkārt, mēs nododam indeksa parametru, iestatot to uz “True”. Katrai kolonnas vērtībai redzēsit, ka indeksa pozīcija tiek atgriezta kā atslēga vārdnīcā.

Otrajā izvadē tiek atgriezti tikai kolonnu nosaukumi (“kolonnas”) un ieraksti (“dati”) bez indeksa pozīcijām, jo ​​indekss ir iestatīts uz “False”.

# Konvertējiet uz JSON, izmantojot to_json() ar indeksu = True

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

print(json_skills_data, ' \n ' )

# Konvertējiet uz JSON, izmantojot to_json() ar index=False

json_skills_data= prasmes_df.toPandas().to_json(index=False,orient= 'šķelšanās' )

drukāt (json_skills_data)

Izvade:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'persona' :{ '0' : 'Mīļā' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'balva' :{ '0' : 25 000 , '1' : 2000. gads , '2' : 1200 }, 'prasme' :{ '0' : 'glezna' , '1' : 'dejot' , '2' : 'lasīšana' }}

{ 'kolonnas' :[ 'id' , 'persona' , 'balva' , 'prasme' ], 'dati' :[[ 123 , 'Mīļā' , 25 000 , 'glezna' ],[ 112 , 'Mouni' , 2000. gads , 'dejot' ],[ 153 , 'Tulasi' , 1200 , 'lasīšana' ]]

PySpark DataFrame uz JSON, izmantojot ToJSON()

Metode toJSON() tiek izmantota, lai PySpark DataFrame pārveidotu par JSON objektu. Būtībā tas atgriež JSON virkni, kuru ieskauj saraksts. The ['{column:value,…}',…. ] ir formāts, ko atgriež šī funkcija. Šeit katra rinda no PySpark DataFrame tiek atgriezta kā vārdnīca ar kolonnas nosaukumu kā atslēgu.

Sintakse:

dataframe_object.toJSON()

Var būt iespējams nodot tādus parametrus kā indekss, kolonnu etiķetes un datu tips.

Piemērs:

Izveidojiet “skills_df” PySpark DataFrame ar 5 rindām un 4 kolonnām. Konvertējiet šo DataFrame uz JSON, izmantojot metodi toJSON().

importēt pyspark

no pyspark.sql importēt SparkSession

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

# prasmju dati ar 5 rindām un 4 kolonnām

prasmes =[{ 'id' : 123 , 'persona' : 'Mīļā' , 'prasme' : 'glezna' , 'balva' : 25 000 },

{ 'id' : 112 , 'persona' : 'Mouni' , 'prasme' : 'mūzika/deja' , 'balva' : 2000. gads },

{ 'id' : 153 , 'persona' : 'Tulasi' , 'prasme' : 'lasīšana' , 'balva' : 1200 },

{ 'id' : 173 , 'persona' : 'skrēja' , 'prasme' : 'mūzika' , 'balva' : 2000. gads },

{ 'id' : 43 , 'persona' : 'Kamala' , 'prasme' : 'lasīšana' , 'balva' : 10 000 }

]

# izveidojiet prasmju datu rāmi no iepriekšminētajiem datiem

Skills_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiskie prasmju dati

prasmes_df.show()

# Konvertēt uz JSON masīvu

json_skills_data = prasmes_df.toJSON().collect()

drukāt (json_skills_data)

Izvade:

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

| id|persona|balva| prasme|

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

| 123 | Medus| 25 000 | glezna|

| 112 | Mouni| 2000. gads |mūzika/deja|

| 153 |Tulasi| 1200 | lasīšana|

| 173 | Skrēja| 2000. gads | mūzika|

| 43 |Kamala| 10 000 | lasīšana|

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

[ '{'id':123,'person':'Honey','prize':25000,'skill':'glezniecība'}' , '{'id':112,'persona':'Mouni','balva':2000,'prasme':'mūzika/deja'}' , '{'id':153,'persona':'Tulasi','balva':1200,'prasme':'lasīšana'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'mūzika'}' , '{'id':43,'persona':'Kamala','balva':10000,'prasme':'lasīšana'}' ]

PySpark DataFrame ir 5 rindas. Visas šīs 5 rindas tiek atgrieztas kā virkņu vārdnīca, kas ir atdalīta ar komatu.

PySpark DataFrame uz JSON, izmantojot Write.json()

Pakalpojumā PySpark ir pieejama metode write.json(), kas raksta/saglabā PySpark DataFrame JSON failā. Tas izmanto faila nosaukumu/ceļu kā parametru. Būtībā tas atgriež JSON vairākos failos (sadalītajos failos). Lai tos visus apvienotu vienā failā, mēs varam izmantot coalesce() metodi.

Sintakse:

dataframe_object.coalesce( 1 ).write.json('faila_nosaukums')
  1. Pievienošanas režīms - dataframe_object.write.mode('pievienot').json('faila_nosaukums')
  2. Pārrakstīšanas režīms - dataframe_object.write.mode('pārrakstīt').json('faila_nosaukums')

Var būt iespējams pievienot/pārrakstīt esošo JSON. Izmantojot write.mode(), mēs varam pievienot datus, nododot “append”, vai pārrakstīt esošos JSON datus, nododot šai funkcijai “overwrite”.

1. piemērs:

Izveidojiet “skills_df” PySpark DataFrame ar 3 rindām un 4 kolonnām. Ierakstiet šo DataFrame JSON.

importēt pyspark

importēt pandas

no pyspark.sql importēt SparkSession

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

# prasmju dati ar 3 rindām un 4 kolonnām

prasmes =[{ 'id' : 123 , 'persona' : 'Mīļā' , 'prasme' : 'glezna' , 'balva' : 25 000 },

{ 'id' : 112 , 'persona' : 'Mouni' , 'prasme' : 'dejot' , 'balva' : 2000. gads },

{ 'id' : 153 , 'persona' : 'Tulasi' , 'prasme' : 'lasīšana' , 'balva' : 1200 }

]

# izveidojiet prasmju datu rāmi no iepriekšminētajiem datiem

Skills_df = linuxhint_spark_app.createDataFrame(skills)

# write.json()

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

JSON fails:

Mēs redzam, ka mapē skill_data ir ietverti sadalītie JSON dati.

Atvērsim JSON failu. Mēs redzam, ka visas PySpark DataFrame rindas tiek pārveidotas par JSON.

PySpark DataFrame ir 5 rindas. Visas šīs 5 rindas tiek atgrieztas kā virkņu vārdnīca, kas ir atdalīta ar komatu.

2. piemērs:

Izveidojiet “skills2_df” PySpark DataFrame ar vienu rindu. Pievienojiet vienu rindu iepriekšējam JSON failam, norādot režīmu kā “pievienot”.

importēt pyspark

importēt pandas

no pyspark.sql importēt SparkSession

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

prasmes2 =[{ 'id' : 78 , 'persona' : 'Mērija' , 'prasme' : 'jāšana' , 'balva' : 8960 }

]

# izveidojiet prasmju datu rāmi no iepriekšminētajiem datiem

Skills2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() ar pievienošanas režīmu.

prasmes2_df.write.mode( 'pievienot' .json( 'skills_data' )

JSON fails:

Mēs varam redzēt sadalītos JSON failus. Pirmajā failā ir pirmie DataFrame ieraksti, bet otrajā failā ir otrais DataFrame ieraksts.

Secinājums

Ir trīs dažādi veidi, kā pārvērst PySpark DataFrame par JSON. Pirmkārt, mēs apspriedām metodi to_json (), kas pārveido par JSON, pārvēršot PySpark DataFrame par Pandas DataFrame ar dažādiem piemēriem, ņemot vērā dažādus parametrus. Tālāk mēs izmantojām toJSON () metodi. Visbeidzot, mēs uzzinājām, kā izmantot funkciju write.json(), lai PySpark DataFrame rakstītu JSON. Ar šo funkciju ir iespējama pievienošana un pārrakstīšana.