Konvertering av PySpark DataFrame til JSON

Konvertering Av Pyspark Dataframe Til Json



Å overføre strukturerte data ved hjelp av JSON er mulig og bruker også lite minne. Sammenlignet med PySpark RDD eller PySpark DataFrame, bruker JSON lite minne og serialisering som er mulig med JSON. Vi er i stand til å konvertere PySpark DataFrame til JSON ved å bruke pyspark.sql.DataFrameWriter.json()-metoden. Bortsett fra det, er det to andre måter å konvertere DataFrame til JSON.

Emne for innhold:

La oss vurdere en enkel PySpark DataFrame i alle eksemplene og konvertere den til JSON ved å bruke de nevnte funksjonene.







Nødvendig modul:

Installer PySpark-biblioteket i miljøet ditt hvis det ikke er installert ennå. Du kan referere til følgende kommando for å installere den:



pip installer pyspark

PySpark DataFrame til JSON Bruke To_json() med ToPandas()

Metoden to_json() er tilgjengelig i Pandas-modulen som konverterer Pandas DataFrame til JSON. Vi kan bruke denne metoden hvis vi konverterer PySpark DataFrame til Pandas DataFrame. For å konvertere PySpark DataFrame til Pandas DataFrame, brukes toPandas()-metoden. La oss se syntaksen til to_json() sammen med parameterne.



Syntaks:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Orient brukes til å vise den konverterte JSON som ønsket format. Det tar 'poster', 'tabell', 'verdier', 'kolonner', 'indeks', 'delt'.
  2. Indeks brukes til å inkludere/fjerne indeksen fra den konverterte JSON-strengen. Hvis den er satt til 'True', vises indeksene. Ellers vil ikke indeksene vises hvis orienteringen er 'delt' eller 'tabell'.

Eksempel 1: Orienter som 'Records'

Lag en «skills_df» PySpark DataFrame med 3 rader og 4 kolonner. Konverter denne DataFrame til JSON ved å spesifisere orient-parameteren som 'records'.

importere pyspark

importere pandaer

fra pyspark.sql importer SparkSession

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

# ferdighetsdata med 3 rader og 4 kolonner

ferdigheter =[{ 'id' : 123 , 'person' : 'Honning' , 'ferdighet' : 'maleri' , 'premie' : 25 000 },

{ 'id' : 112 , 'person' : 'Mouni' , 'ferdighet' : 'danse' , 'premie' : 2000 },

{ 'id' : 153 , 'person' : 'Tulasi' , 'ferdighet' : 'lesning' , 'premie' : 1200 }

]

# lag ferdighetsdatarammen fra dataene ovenfor

skills_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiske ferdighetsdata

skills_df.show()

# Konverter til JSON ved å bruke to_json() med orient som 'records'

json_skills_data = skills_df.toPandas().to_json(orient= 'rekorder' )

print(json_skills_data)

Produksjon:



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

| id|person|premie| ferdighet|

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

| 123 | kjære| 25 000 |maleri|

| 112 | Mouni| 2000 | dans|

| 153 |Tulasi| 1200 | lesing|

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

[{ 'id' : 123 , 'person' : 'Honning' , 'premie' : 25 000 , 'ferdighet' : 'maleri' },{ 'id' : 112 , 'person' : 'Mouni' , 'premie' : 2000 , 'ferdighet' : 'danse' },{ 'id' : 153 , 'person' : 'Tulasi' , 'premie' : 1200 , 'ferdighet' : 'lesning' }]

Vi kan se at PySpark DataFrame er konvertert til JSON-matrisen med en ordbok med verdier. Her representerer nøklene kolonnenavnet og verdien representerer rad-/celleverdien i PySpark DataFrame.

Eksempel 2: Orienter som 'Splitt'

JSON-formatet som returneres av 'delt'-orienteringen inkluderer kolonnenavnene som har en liste over kolonner, liste over indeks og liste over data. Følgende er formatet til den 'delte' orienteringen.

# Konverter til JSON ved å bruke to_json() med orient som 'split'

json_skills_data = skills_df.toPandas().to_json(orient= 'dele' )

print(json_skills_data)

Produksjon:

{ 'kolonner' :[ 'id' , 'person' , 'premie' , 'ferdighet' ], 'indeks' :[ 0 , 1 , 2 ], 'data' :[[ 123 , 'Honning' , 25 000 , 'maleri' ],[ 112 , 'Mouni' , 2000 , 'danse' ],[ 153 , 'Tulasi' , 1200 , 'lesning' ]]}

Eksempel 3: Orienter som 'indeks'

Her blir hver rad fra PySpark DataFrame trukket tilbake i form av en ordbok med nøkkelen som kolonnenavn. For hver ordbok er indeksposisjonen spesifisert som en nøkkel.

# Konverter til JSON ved å bruke to_json() med orient som 'indeks'

json_skills_data = skills_df.toPandas().to_json(orient= 'indeks' )

print(json_skills_data)

Produksjon:

{ '0' :{ 'id' : 123 , 'person' : 'Honning' , 'premie' : 25 000 , 'ferdighet' : 'maleri' }, '1' :{ 'id' : 112 , 'person' : 'Mouni' , 'premie' : 2000 , 'ferdighet' : 'danse' }, '2' :{ 'id' : 153 , 'person' : 'Tulasi' , 'premie' : 1200 , 'ferdighet' : 'lesning' }}

Eksempel 4: Orienter som «kolonner»

Kolonner er nøkkelen for hver post. Hver kolonne inneholder en ordbok som tar kolonneverdiene med indeksnummer.

# Konverter til JSON ved å bruke to_json() med orient som 'kolonner'

json_skills_data = skills_df.toPandas().to_json(orient= 'kolonner' )

print(json_skills_data)

Produksjon:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'person' :{ '0' : 'Honning' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'premie' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'ferdighet' :{ '0' : 'maleri' , '1' : 'danse' , '2' : 'lesning' }}

Eksempel 5: Orienter som «verdier»

Hvis du bare trenger verdiene i JSON, kan du gå for 'verdier'-orienteringen. Den viser hver rad i en liste. Til slutt blir alle listene lagret i en liste. Denne JSON er av typen nestet liste.

# Konverter til JSON ved å bruke to_json() med orient som 'verdier'

json_skills_data = skills_df.toPandas().to_json(orient= 'verdier' )

print(json_skills_data)

Produksjon:

[[ 123 , 'Honning' , 25 000 , 'maleri' ],[ 112 , 'Mouni' , 2000 , 'danse' ],[ 153 , 'Tulasi' , 1200 , 'lesning' ]]

Eksempel 6: Orienter som 'tabell'

'Tabell'-orienteringen returnerer JSON-en som inkluderer skjemaet med feltnavn sammen med kolonnedatatypene, indeksen som primærnøkkel og Pandas-versjonen. Kolonnenavnene med verdier vises som 'data'.

# Konverter til JSON ved å bruke to_json() med orient som 'tabell'

json_skills_data = skills_df.toPandas().to_json(orient= 'bord' )

print(json_skills_data)

Produksjon:

{ 'skjema' :{ 'Enger' :[{ 'Navn' : 'indeks' , 'type' : 'heltall' },{ 'Navn' : 'id' , 'type' : 'heltall' },{ 'Navn' : 'person' , 'type' : 'streng' },{ 'Navn' : 'premie' , 'type' : 'heltall' },{ 'Navn' : 'ferdighet' , 'type' : 'streng' }], 'primærnøkkel' :[ 'indeks' ], 'pandas_version' : '1.4.0' }, 'data' :[{ 'indeks' : 0 , 'id' : 123 , 'person' : 'Honning' , 'premie' : 25 000 , 'ferdighet' : 'maleri' },{ 'indeks' : 1 , 'id' : 112 , 'person' : 'Mouni' , 'premie' : 2000 , 'ferdighet' : 'danse' },{ 'indeks' : 2 , 'id' : 153 , 'person' : 'Tulasi' , 'premie' : 1200 , 'ferdighet' : 'lesning' }]}

Eksempel 7: Med indeksparameter

Først sender vi indeksparameteren ved å sette den til 'True'. Du vil se for hver kolonneverdi at indeksposisjonen returneres som en nøkkel i en ordbok.

I den andre utgangen returneres bare kolonnenavnene ('kolonner') og postene ('data') uten indeksposisjonene siden indeksen er satt til 'False'.

# Konverter til JSON ved å bruke to_json() med index=True

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

print(json_skills_data, ' \n ' )

# Konverter til JSON ved å bruke to_json() med index=False

json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'dele' )

print(json_skills_data)

Produksjon:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'person' :{ '0' : 'Honning' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'premie' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'ferdighet' :{ '0' : 'maleri' , '1' : 'danse' , '2' : 'lesning' }}

{ 'kolonner' :[ 'id' , 'person' , 'premie' , 'ferdighet' ], 'data' :[[ 123 , 'Honning' , 25 000 , 'maleri' ],[ 112 , 'Mouni' , 2000 , 'danse' ],[ 153 , 'Tulasi' , 1200 , 'lesning' ]]

PySpark DataFrame til JSON ved hjelp av ToJSON()

Metoden toJSON() brukes til å konvertere PySpark DataFrame til et JSON-objekt. I utgangspunktet returnerer den en JSON-streng som er omgitt av en liste. De [‘{kolonne:verdi,…}’,…. ] er formatet som returneres av denne funksjonen. Her returneres hver rad fra PySpark DataFrame som en ordbok med kolonnenavnet som nøkkel.

Syntaks:

dataframe_object.toJSON()

Det kan være mulig å sende parametere som indeks, kolonneetiketter og datatype.

Eksempel:

Lag en 'skills_df' PySpark DataFrame med 5 rader og 4 kolonner. Konverter denne DataFrame til JSON ved å bruke toJSON()-metoden.

importere pyspark

fra pyspark.sql importer SparkSession

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

# ferdighetsdata med 5 rader og 4 kolonner

ferdigheter =[{ 'id' : 123 , 'person' : 'Honning' , 'ferdighet' : 'maleri' , 'premie' : 25 000 },

{ 'id' : 112 , 'person' : 'Mouni' , 'ferdighet' : 'musikk/dans' , 'premie' : 2000 },

{ 'id' : 153 , 'person' : 'Tulasi' , 'ferdighet' : 'lesning' , 'premie' : 1200 },

{ 'id' : 173 , 'person' : 'Løp' , 'ferdighet' : 'musikk' , 'premie' : 2000 },

{ 'id' : 43 , 'person' : 'Kamala' , 'ferdighet' : 'lesning' , 'premie' : 10 000 }

]

# lag ferdighetsdatarammen fra dataene ovenfor

skills_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiske ferdighetsdata

skills_df.show()

# Konverter til JSON-array

json_skills_data = skills_df.toJSON().collect()

print(json_skills_data)

Produksjon:

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

| id|person|premie| ferdighet|

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

| 123 | kjære| 25 000 | maleri|

| 112 | Mouni| 2000 |musikk/dans|

| 153 |Tulasi| 1200 | lesing|

| 173 | Løp| 2000 | musikk|

| 43 |Kamala| 10 000 | lesing|

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

[ '{'id':123,'person':'Honey','prize':25000,'skill':'painting'}' , '{'id':112,'person':'Mouni','prize':2000,'skill':'musikk/dans'}' , '{'id':153,'person':'Tulasi','prize':1200,'skill':'reading'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'music'}' , '{'id':43,'person':'Kamala','prize':10000,'skill':'reading'}' ]

Det er 5 rader i PySpark DataFrame. Alle disse 5 radene returneres som en ordbok med strenger som er atskilt med komma.

PySpark DataFrame til JSON ved å bruke Write.json()

Write.json()-metoden er tilgjengelig i PySpark som skriver/lagrer PySpark DataFrame til en JSON-fil. Den tar filnavnet/banen som en parameter. I utgangspunktet returnerer den JSON i flere filer (partisjonerte filer). For å slå sammen alle i en enkelt fil, kan vi bruke coalesce()-metoden.

Syntaks:

dataframe_object.coalesce( 1 ).write.json('filnavn')
  1. Legg til-modus – dataframe_object.write.mode(‘append’).json(‘filnavn’)
  2. Overskrivemodus – dataframe_object.write.mode(‘overwrite’).json(‘file_name’)

Det kan være mulig å legge til/overskrive eksisterende JSON. Ved å bruke write.mode(), kan vi legge til dataene ved å sende 'append' eller overskrive eksisterende JSON-data ved å sende 'overwrite' til denne funksjonen.

Eksempel 1:

Lag en «skills_df» PySpark DataFrame med 3 rader og 4 kolonner. Skriv denne DataFrame til JSON.

importere pyspark

importere pandaer

fra pyspark.sql importer SparkSession

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

# ferdighetsdata med 3 rader og 4 kolonner

ferdigheter =[{ 'id' : 123 , 'person' : 'Honning' , 'ferdighet' : 'maleri' , 'premie' : 25 000 },

{ 'id' : 112 , 'person' : 'Mouni' , 'ferdighet' : 'danse' , 'premie' : 2000 },

{ 'id' : 153 , 'person' : 'Tulasi' , 'ferdighet' : 'lesning' , 'premie' : 1200 }

]

# lag ferdighetsdatarammen fra dataene ovenfor

skills_df = linuxhint_spark_app.createDataFrame(skills)

# write.json()

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

JSON-fil:

Vi kan se at skills_data-mappen inkluderer de partisjonerte JSON-dataene.

La oss åpne JSON-filen. Vi kan se at alle radene fra PySpark DataFrame er konvertert til JSON.

Det er 5 rader i PySpark DataFrame. Alle disse 5 radene returneres som en ordbok med strenger som er atskilt med komma.

Eksempel 2:

Lag en 'skills2_df' PySpark DataFrame med én rad. Legg til en rad til forrige JSON-fil ved å spesifisere modusen som 'legg til'.

importere pyspark

importere pandaer

fra pyspark.sql importer SparkSession

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

ferdigheter2 =[{ 'id' : 78 , 'person' : 'Mary' , 'ferdighet' : 'ri' , 'premie' : 8960 }

]

# lag ferdighetsdatarammen fra dataene ovenfor

skills2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() med tilleggsmodus.

skills2_df.write.mode( 'legg til' ).json( 'skills_data' )

JSON-fil:

Vi kan se de partisjonerte JSON-filene. Den første filen inneholder de første DataFrame-postene og den andre filen inneholder den andre DataFrame-posten.

Konklusjon

Det er tre forskjellige måter å konvertere PySpark DataFrame til JSON. Først diskuterte vi to_json()-metoden som konverterer til JSON ved å konvertere PySpark DataFrame til Pandas DataFrame med forskjellige eksempler ved å vurdere forskjellige parametere. Deretter brukte vi toJSON()-metoden. Til slutt lærte vi hvordan du bruker write.json()-funksjonen til å skrive PySpark DataFrame til JSON. Tilføying og overskriving er mulig med denne funksjonen.