Konvertera PySpark DataFrame till JSON

Konvertera Pyspark Dataframe Till Json



Det är möjligt att överföra strukturerad data med JSON och förbrukar också lite minne. Jämfört med PySpark RDD eller PySpark DataFrame, förbrukar JSON lågt minne och serialisering vilket är möjligt med JSON. Vi kan konvertera PySpark DataFrame till JSON med metoden pyspark.sql.DataFrameWriter.json() . Förutom det finns det två andra sätt att konvertera DataFrame till JSON.

Ämne för innehåll:

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,...)
  1. Orient används för att visa den konverterade JSON som önskat format. Det tar 'rekord', 'tabell', 'värden', 'kolumner', 'index', 'dela'.
  2. 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 pyspark

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

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

frå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')
  1. Lägg till läge – dataframe_object.write.mode(‘append’).json(‘filnamn’)
  2. Ö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 pyspark

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

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