Ämne för innehåll:
- PySpark DataFrame till JSON Använda To_json() med ToPandas()
- PySpark DataFrame till JSON med ToJSON()
- PySpark DataFrame till JSON med Write.json()
Låt oss överväga en enkel PySpark DataFrame i alla exempel och konvertera den till JSON med hjälp av de nämnda funktionerna.
Obligatorisk modul:
Installera PySpark-biblioteket i din miljö om det inte är installerat ännu. Du kan hänvisa till följande kommando för att installera det:
pip installera pyspark
PySpark DataFrame till JSON Använda To_json() med ToPandas()
Metoden to_json() är tillgänglig i Pandas-modulen som konverterar Pandas DataFrame till JSON. Vi kan använda denna metod om vi konverterar vår PySpark DataFrame till Pandas DataFrame. För att konvertera PySpark DataFrame till Pandas DataFrame, används metoden toPandas(). Låt oss se syntaxen för to_json() tillsammans med dess parametrar.
Syntax:
dataframe_object.toPandas().to_json(orient,index,...)
- Orient används för att visa den konverterade JSON som önskat format. Det tar 'rekord', 'tabell', 'värden', 'kolumner', 'index', 'dela'.
- Index används för att inkludera/ta bort indexet från den konverterade JSON-strängen. Om den är inställd på 'True' visas indexen. Annars kommer indexen inte att visas om orienten är 'delad' eller 'tabell'.
Exempel 1: Orientera som 'Rekord'
Skapa en 'skills_df' PySpark DataFrame med 3 rader och 4 kolumner. Konvertera denna DataFrame till JSON genom att ange parametern orient som 'records'.
importera pysparkimportera pandor
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux tips' ).getOrCreate()
# kompetensdata med 3 rader och 4 kolumner
färdigheter =[{ 'id' : 123 , 'person' : 'Honung' , 'skicklighet' : 'målning' , 'pris' : 25 000 },
{ 'id' : 112 , 'person' : 'Mouni' , 'skicklighet' : 'dansa' , 'pris' : 2000 },
{ 'id' : 153 , 'person' : 'Tulasi' , 'skicklighet' : 'läsning' , 'pris' : 1200 }
]
# skapa kompetensdataramen från ovanstående data
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Faktisk kompetensdata
skills_df.show()
# Konvertera till JSON med to_json() med orient som 'records'
json_skills_data = skills_df.toPandas().to_json(orient= 'uppgifter' )
print(json_skills_data)
Produktion:
+---+------+-----+--------+
| id|person|pris| skicklighet|
+---+------+-----+--------+
| 123 | Älskling| 25 000 |målning|
| 112 | Mouni| 2000 | dansa|
| 153 |Tulasi| 1200 | läser|
+---+------+-----+--------+
[{ 'id' : 123 , 'person' : 'Honung' , 'pris' : 25 000 , 'skicklighet' : 'målning' },{ 'id' : 112 , 'person' : 'Mouni' , 'pris' : 2000 , 'skicklighet' : 'dansa' },{ 'id' : 153 , 'person' : 'Tulasi' , 'pris' : 1200 , 'skicklighet' : 'läsning' }]
Vi kan se att PySpark DataFrame konverteras till JSON-arrayen med en ordbok med värden. Här representerar nycklarna kolumnnamnet och värdet representerar rad-/cellvärdet i PySpark DataFrame.
Exempel 2: Orientera som 'Split'
JSON-formatet som returneras av 'split'-orienteringen inkluderar kolumnnamnen som har en lista med kolumner, lista med index och lista med data. Följande är formatet för den 'delade' orienten.
# Konvertera till JSON med to_json() med orient som 'split'
json_skills_data = skills_df.toPandas().to_json(orient= 'dela' )
print(json_skills_data)
Produktion:
{ 'kolumner' :[ 'id' , 'person' , 'pris' , 'skicklighet' ], 'index' :[ 0 , 1 , 2 ], 'data' :[[ 123 , 'Honung' , 25 000 , 'målning' ],[ 112 , 'Mouni' , 2000 , 'dansa' ],[ 153 , 'Tulasi' , 1200 , 'läsning' ]]}Exempel 3: Orientera som 'Index'
Här tas varje rad från PySpark DataFrame tillbaka i form av en ordbok med nyckeln som kolumnnamn. För varje ordbok anges indexpositionen som en nyckel.
# Konvertera till JSON med to_json() med orient som 'index'
json_skills_data = skills_df.toPandas().to_json(orient= 'index' )
print(json_skills_data)
Produktion:
{ '0' :{ 'id' : 123 , 'person' : 'Honung' , 'pris' : 25 000 , 'skicklighet' : 'målning' }, '1' :{ 'id' : 112 , 'person' : 'Mouni' , 'pris' : 2000 , 'skicklighet' : 'dansa' }, '2' :{ 'id' : 153 , 'person' : 'Tulasi' , 'pris' : 1200 , 'skicklighet' : 'läsning' }}Exempel 4: Orientera som 'kolumner'
Kolumner är nyckeln för varje post. Varje kolumn innehåller en ordbok som tar kolumnvärdena med indexnummer.
# Konvertera till JSON med to_json() med orient som 'kolumner'
json_skills_data = skills_df.toPandas().to_json(orient= 'kolumner' )
print(json_skills_data)
Produktion:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'person' :{ '0' : 'Honung' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'pris' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'skicklighet' :{ '0' : 'målning' , '1' : 'dansa' , '2' : 'läsning' }}Exempel 5: Orientera som 'Värden'
Om du bara behöver värdena i JSON kan du välja 'värden'-orienteringen. Den visar varje rad i en lista. Slutligen lagras alla listor i en lista. Denna JSON är av typen kapslad list.
# Konvertera till JSON med to_json() med orient som 'värden'
json_skills_data = skills_df.toPandas().to_json(orient= 'värden' )
print(json_skills_data)
Produktion:
[[ 123 , 'Honung' , 25 000 , 'målning' ],[ 112 , 'Mouni' , 2000 , 'dansa' ],[ 153 , 'Tulasi' , 1200 , 'läsning' ]]Exempel 6: Orientera som 'tabell'
'Tabell'-orienteringen returnerar JSON som inkluderar schemat med fältnamn tillsammans med kolumndatatyperna, indexet som primärnyckel och Pandas-versionen. Kolumnnamnen med värden visas som 'data'.
# Konvertera till JSON med to_json() med orient som 'tabell'
json_skills_data = skills_df.toPandas().to_json(orient= 'tabell' )
print(json_skills_data)
Produktion:
{ 'schema' :{ 'fält' :[{ 'namn' : 'index' , 'typ' : 'heltal' },{ 'namn' : 'id' , 'typ' : 'heltal' },{ 'namn' : 'person' , 'typ' : 'sträng' },{ 'namn' : 'pris' , 'typ' : 'heltal' },{ 'namn' : 'skicklighet' , 'typ' : 'sträng' }], 'primärnyckel' :[ 'index' ], 'pandas_version' : '1.4.0' }, 'data' :[{ 'index' : 0 , 'id' : 123 , 'person' : 'Honung' , 'pris' : 25 000 , 'skicklighet' : 'målning' },{ 'index' : 1 , 'id' : 112 , 'person' : 'Mouni' , 'pris' : 2000 , 'skicklighet' : 'dansa' },{ 'index' : 2 , 'id' : 153 , 'person' : 'Tulasi' , 'pris' : 1200 , 'skicklighet' : 'läsning' }]}Exempel 7: Med indexparameter
Först skickar vi indexparametern genom att ställa in den på 'True'. Du kommer att se för varje kolumnvärde att indexpositionen returneras som en nyckel i en ordbok.
I den andra utgången returneras endast kolumnnamnen ('kolumner') och poster ('data') utan indexpositionerna eftersom indexet är satt till 'False'.
# Konvertera till JSON med to_json() med index=Truejson_skills_data = skills_df.toPandas().to_json(index=True)
print(json_skills_data, ' \n ' )
# Konvertera till JSON med to_json() med index=False
json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'dela' )
print(json_skills_data)
Produktion:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'person' :{ '0' : 'Honung' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'pris' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'skicklighet' :{ '0' : 'målning' , '1' : 'dansa' , '2' : 'läsning' }}{ 'kolumner' :[ 'id' , 'person' , 'pris' , 'skicklighet' ], 'data' :[[ 123 , 'Honung' , 25 000 , 'målning' ],[ 112 , 'Mouni' , 2000 , 'dansa' ],[ 153 , 'Tulasi' , 1200 , 'läsning' ]]
PySpark DataFrame till JSON med ToJSON()
Metoden toJSON() används för att konvertera PySpark DataFrame till ett JSON-objekt. I grund och botten returnerar den en JSON-sträng som är omgiven av en lista. De ['{kolumn:värde,...}',... ] är formatet som returneras av denna funktion. Här returneras varje rad från PySpark DataFrame som en ordbok med kolumnnamnet som nyckel.
Syntax:
dataframe_object.toJSON()Det kan vara möjligt att skicka parametrar som index, kolumnetiketter och datatyp.
Exempel:
Skapa en 'skills_df' PySpark DataFrame med 5 rader och 4 kolumner. Konvertera denna DataFrame till JSON med metoden toJSON().
importera pysparkfrån pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux tips' ).getOrCreate()
# kompetensdata med 5 rader och 4 kolumner
färdigheter =[{ 'id' : 123 , 'person' : 'Honung' , 'skicklighet' : 'målning' , 'pris' : 25 000 },
{ 'id' : 112 , 'person' : 'Mouni' , 'skicklighet' : 'musik/dans' , 'pris' : 2000 },
{ 'id' : 153 , 'person' : 'Tulasi' , 'skicklighet' : 'läsning' , 'pris' : 1200 },
{ 'id' : 173 , 'person' : 'Sprang' , 'skicklighet' : 'musik' , 'pris' : 2000 },
{ 'id' : 43 , 'person' : 'Kamala' , 'skicklighet' : 'läsning' , 'pris' : 10 000 }
]
# skapa kompetensdataramen från ovanstående data
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Faktisk kompetensdata
skills_df.show()
# Konvertera till JSON-array
json_skills_data = skills_df.toJSON().collect()
print(json_skills_data)
Produktion:
+---+------+-----+------------+| id|person|pris| skicklighet|
+---+------+-----+------------+
| 123 | Älskling| 25 000 | måla|
| 112 | Mouni| 2000 |musik/dans|
| 153 |Tulasi| 1200 | läser|
| 173 | Sprang| 2000 | musik|
| 43 |Kamala| 10 000 | läser|
+---+------+-----+------------+
[ '{'id':123,'person':'Honey','prize':25000,'skill':'painting'}' , '{'id':112,'person':'Mouni','prize':2000,'skill':'musik/dans'}' , '{'id':153,'person':'Tulasi','prize':1200,'skill':'reading'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'musik'}' , '{'id':43,'person':'Kamala','prize':10000,'skill':'reading'}' ]
Det finns 5 rader i PySpark DataFrame. Alla dessa 5 rader returneras som en ordbok med strängar som är separerade med kommatecken.
PySpark DataFrame till JSON med Write.json()
Metoden write.json() är tillgänglig i PySpark som skriver/sparar PySpark DataFrame till en JSON-fil. Den tar filnamnet/sökvägen som en parameter. I grund och botten returnerar den JSON i flera filer (partitionerade filer). För att slå samman dem alla i en enda fil kan vi använda metoden coalesce() .
Syntax:
dataframe_object.coalesce( 1 ).write.json('filnamn')- Lägg till läge – dataframe_object.write.mode(‘append’).json(‘filnamn’)
- Överskrivningsläge – dataframe_object.write.mode(‘overwrite’).json(‘file_name’)
Det kan vara möjligt att lägga till/skriva över befintlig JSON. Med hjälp av write.mode() kan vi lägga till data genom att skicka 'append' eller skriva över befintliga JSON-data genom att skicka 'overwrite' till den här funktionen.
Exempel 1:
Skapa en 'skills_df' PySpark DataFrame med 3 rader och 4 kolumner. Skriv denna DataFrame till JSON.
importera pysparkimportera pandor
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux tips' ).getOrCreate()
# kompetensdata med 3 rader och 4 kolumner
färdigheter =[{ 'id' : 123 , 'person' : 'Honung' , 'skicklighet' : 'målning' , 'pris' : 25 000 },
{ 'id' : 112 , 'person' : 'Mouni' , 'skicklighet' : 'dansa' , 'pris' : 2000 },
{ 'id' : 153 , 'person' : 'Tulasi' , 'skicklighet' : 'läsning' , 'pris' : 1200 }
]
# skapa kompetensdataramen från ovanstående data
skills_df = linuxhint_spark_app.createDataFrame(skills)
# write.json()
skills_df.coalesce( 1 ).write.json( 'skills_data' )
JSON-fil:
Vi kan se att mappen skills_data innehåller de partitionerade JSON-data.
Låt oss öppna JSON-filen. Vi kan se att alla rader från PySpark DataFrame konverteras till JSON.
Det finns 5 rader i PySpark DataFrame. Alla dessa 5 rader returneras som en ordbok med strängar som är separerade med kommatecken.
Exempel 2:
Skapa en 'skills2_df' PySpark DataFrame med en rad. Lägg till en rad till föregående JSON-fil genom att ange läget som 'lägg till'.
importera pysparkimportera pandor
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux tips' ).getOrCreate()
färdigheter2 =[{ 'id' : 78 , 'person' : 'Maria' , 'skicklighet' : 'ridning' , 'pris' : 8960 }
]
# skapa kompetensdataramen från ovanstående data
skills2_df = linuxhint_spark_app.createDataFrame(skills2)
# write.json() med tilläggsläge.
skills2_df.write.mode( 'bifoga' ).json( 'skills_data' )
JSON-fil:
Vi kan se de partitionerade JSON-filerna. Den första filen innehåller de första DataFrame-posterna och den andra filen innehåller den andra DataFrame-posten.
Slutsats
Det finns tre olika sätt att konvertera PySpark DataFrame till JSON. Först diskuterade vi metoden to_json() som konverterar till JSON genom att konvertera PySpark DataFrame till Pandas DataFrame med olika exempel genom att överväga olika parametrar. Därefter använde vi metoden toJSON(). Slutligen lärde vi oss hur man använder funktionen write.json() för att skriva PySpark DataFrame till JSON. Det är möjligt att lägga till och skriva över med denna funktion.