Emne for innhold:
- PySpark DataFrame til JSON Bruke To_json() med ToPandas()
- PySpark DataFrame til JSON ved hjelp av ToJSON()
- PySpark DataFrame til JSON ved å bruke Write.json()
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,...)
- Orient brukes til å vise den konverterte JSON som ønsket format. Det tar 'poster', 'tabell', 'verdier', 'kolonner', 'indeks', 'delt'.
- 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 pysparkimportere 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=Truejson_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 pysparkfra 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')- Legg til-modus – dataframe_object.write.mode(‘append’).json(‘filnavn’)
- 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 pysparkimportere 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 pysparkimportere 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.