Konvertering af PySpark DataFrame til JSON

Konvertering Af Pyspark Dataframe Til Json



Transmission af strukturerede data ved hjælp af JSON er muligt og bruger også lav hukommelse. Sammenlignet med PySpark RDD eller PySpark DataFrame, bruger JSON lav hukommelse og serialisering, hvilket er muligt med JSON. Vi er i stand til at konvertere PySpark DataFrame til JSON ved hjælp af pyspark.sql.DataFrameWriter.json() metoden. Ud over det er der to andre måder at konvertere DataFrame til JSON.

Emne for indhold:

Lad os overveje en simpel PySpark DataFrame i alle eksemplerne og konvertere den til JSON ved hjælp af de nævnte funktioner.







Påkrævet modul:

Installer PySpark-biblioteket i dit miljø, hvis det endnu ikke er installeret. Du kan henvise til følgende kommando for at installere det:



pip installer pyspark

PySpark DataFrame til JSON Brug af To_json() med ToPandas()

Metoden to_json() er tilgængelig i Pandas-modulet, som konverterer Pandas DataFrame til JSON. Vi kan bruge denne metode, hvis vi konverterer vores PySpark DataFrame til Pandas DataFrame. For at konvertere PySpark DataFrame til Pandas DataFrame, bruges toPandas() metoden. Lad os se syntaksen for to_json() sammen med dens parametre.



Syntaks:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Orient bruges til at vise den konverterede JSON som det ønskede format. Det kræver 'optegnelser', 'tabel', 'værdier', 'kolonner', 'indeks', 'opdel'.
  2. Indeks bruges til at inkludere/fjerne indekset fra den konverterede JSON-streng. Hvis den er indstillet til 'True', vises indeksene. Ellers vil indeksene ikke blive vist, hvis orienteringen er 'delt' eller 'tabel'.

Eksempel 1: Orienter som 'Records'

Opret en 'skills_df' PySpark DataFrame med 3 rækker og 4 kolonner. Konverter denne DataFrame til JSON ved at angive orient-parameteren som 'records'.

importere pyspark

importere pandaer

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# færdighedsdata med 3 rækker og 4 kolonner

færdigheder =[{ 'id' : 123 , 'person' : 'Honning' , 'evne' : 'maleri' , 'præmie' : 25.000 },

{ 'id' : 112 , 'person' : 'Mouni' , 'evne' : 'dans' , 'præmie' : 2000 },

{ 'id' : 153 , 'person' : 'Tulasi' , 'evne' : 'læsning' , 'præmie' : 1200 }

]

# opret færdighedsdatarammen ud fra ovenstående data

skills_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiske færdighedsdata

skills_df.show()

# Konverter til JSON ved hjælp af to_json() med orient som 'records'

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

print(json_skills_data)

Produktion:



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

| id|person|præmie| dygtighed|

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

| 123 | Skat| 25.000 |maleri|

| 112 | Mouni| 2000 | dans|

| 153 |Tulasi| 1200 | læser|

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

[{ 'id' : 123 , 'person' : 'Honning' , 'præmie' : 25.000 , 'evne' : 'maleri' },{ 'id' : 112 , 'person' : 'Mouni' , 'præmie' : 2000 , 'evne' : 'dans' },{ 'id' : 153 , 'person' : 'Tulasi' , 'præmie' : 1200 , 'evne' : 'læsning' }]

Vi kan se, at PySpark DataFrame er konverteret til JSON-arrayet med en ordbog med værdier. Her repræsenterer nøglerne kolonnenavnet, og værdien repræsenterer række-/celleværdien i PySpark DataFrame.

Eksempel 2: Orienter som 'Split'

JSON-formatet, der returneres af 'split'-orienteringen, inkluderer kolonnenavne, som har en liste over kolonner, liste over indeks og liste over data. Følgende er formatet for den 'delte' orientering.

# Konverter til JSON ved hjælp af to_json() med orient som 'split'

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

print(json_skills_data)

Produktion:

{ 'kolonner' :[ 'id' , 'person' , 'præmie' , 'evne' ], 'indeks' :[ 0 , 1 , 2 ], 'data' :[[ 123 , 'Honning' , 25.000 , 'maleri' ],[ 112 , 'Mouni' , 2000 , 'dans' ],[ 153 , 'Tulasi' , 1200 , 'læsning' ]]}

Eksempel 3: Orienter som 'indeks'

Her trækkes hver række fra PySpark DataFrame tilbage i form af en ordbog med nøglen som kolonnenavn. For hver ordbog er indekspositionen angivet som en nøgle.

# Konverter til JSON ved hjælp af to_json() med orient som 'index'

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

print(json_skills_data)

Produktion:

{ '0' :{ 'id' : 123 , 'person' : 'Honning' , 'præmie' : 25.000 , 'evne' : 'maleri' }, '1' :{ 'id' : 112 , 'person' : 'Mouni' , 'præmie' : 2000 , 'evne' : 'dans' }, '2' :{ 'id' : 153 , 'person' : 'Tulasi' , 'præmie' : 1200 , 'evne' : 'læsning' }}

Eksempel 4: Orienter som 'kolonner'

Kolonner er nøglen til hver post. Hver kolonne indeholder en ordbog, der tager kolonneværdierne med indeksnumre.

# Konverter til JSON ved hjælp af to_json() med orient som 'kolonner'

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

print(json_skills_data)

Produktion:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'person' :{ '0' : 'Honning' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'præmie' :{ '0' : 25.000 , '1' : 2000 , '2' : 1200 }, 'evne' :{ '0' : 'maleri' , '1' : 'dans' , '2' : 'læsning' }}

Eksempel 5: Orienter som 'Værdier'

Hvis du kun har brug for værdierne i JSON, kan du gå efter 'værdier'-orienten. Den viser hver række på en liste. Til sidst er alle listerne gemt i en liste. Denne JSON er af typen indlejret liste.

# Konverter til JSON ved hjælp af to_json() med orient som 'værdier'

json_skills_data = skills_df.toPandas().to_json(orient= 'værdier' )

print(json_skills_data)

Produktion:

[[ 123 , 'Honning' , 25.000 , 'maleri' ],[ 112 , 'Mouni' , 2000 , 'dans' ],[ 153 , 'Tulasi' , 1200 , 'læsning' ]]

Eksempel 6: Orienter som 'Tabel'

'Tabel'-orienteringen returnerer den JSON, der inkluderer skemaet med feltnavne sammen med kolonnedatatyperne, indekset som en primær nøgle og Pandas-versionen. Kolonnenavnene med værdier vises som 'data'.

# Konverter til JSON ved hjælp af to_json() med orient som 'table'

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

print(json_skills_data)

Produktion:

{ 'skema' :{ 'felter' :[{ 'navn' : 'indeks' , 'type' : 'heltal' },{ 'navn' : 'id' , 'type' : 'heltal' },{ 'navn' : 'person' , 'type' : 'snor' },{ 'navn' : 'præmie' , 'type' : 'heltal' },{ 'navn' : 'evne' , 'type' : 'snor' }], 'primærnøgle' :[ 'indeks' ], 'pandas_version' : '1.4.0' }, 'data' :[{ 'indeks' : 0 , 'id' : 123 , 'person' : 'Honning' , 'præmie' : 25.000 , 'evne' : 'maleri' },{ 'indeks' : 1 , 'id' : 112 , 'person' : 'Mouni' , 'præmie' : 2000 , 'evne' : 'dans' },{ 'indeks' : 2 , 'id' : 153 , 'person' : 'Tulasi' , 'præmie' : 1200 , 'evne' : 'læsning' }]}

Eksempel 7: Med indeksparameter

Først sender vi indeksparameteren ved at sætte den til 'True'. Du vil se for hver kolonneværdi, at indekspositionen returneres som en nøgle i en ordbog.

I det andet output returneres kun kolonnenavnene ('kolonner') og poster ('data') uden indekspositionerne, da indekset er sat til 'False'.

# Konverter til JSON ved hjælp af to_json() med index=True

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

print(json_skills_data, ' \n ' )

# Konverter til JSON ved hjælp af to_json() med index=False

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

print(json_skills_data)

Produktion:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'person' :{ '0' : 'Honning' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'præmie' :{ '0' : 25.000 , '1' : 2000 , '2' : 1200 }, 'evne' :{ '0' : 'maleri' , '1' : 'dans' , '2' : 'læsning' }}

{ 'kolonner' :[ 'id' , 'person' , 'præmie' , 'evne' ], 'data' :[[ 123 , 'Honning' , 25.000 , 'maleri' ],[ 112 , 'Mouni' , 2000 , 'dans' ],[ 153 , 'Tulasi' , 1200 , 'læsning' ]]

PySpark DataFrame til JSON ved hjælp af ToJSON()

Metoden toJSON() bruges til at konvertere PySpark DataFrame til et JSON-objekt. Grundlæggende returnerer den en JSON-streng, som er omgivet af en liste. Det ['{kolonne:værdi,...}',... ] er det format, der returneres af denne funktion. Her returneres hver række fra PySpark DataFrame som en ordbog med kolonnenavnet som nøglen.

Syntaks:

dataframe_object.toJSON()

Det kan være muligt at videregive parametre som indeks, kolonneetiketter og datatype.

Eksempel:

Opret en 'skills_df' PySpark DataFrame med 5 rækker og 4 kolonner. Konverter denne DataFrame til JSON ved hjælp af toJSON() metoden.

importere pyspark

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# færdighedsdata med 5 rækker og 4 kolonner

færdigheder =[{ 'id' : 123 , 'person' : 'Honning' , 'evne' : 'maleri' , 'præmie' : 25.000 },

{ 'id' : 112 , 'person' : 'Mouni' , 'evne' : 'musik/dans' , 'præmie' : 2000 },

{ 'id' : 153 , 'person' : 'Tulasi' , 'evne' : 'læsning' , 'præmie' : 1200 },

{ 'id' : 173 , 'person' : 'løb' , 'evne' : 'musik' , 'præmie' : 2000 },

{ 'id' : 43 , 'person' : 'Kamala' , 'evne' : 'læsning' , 'præmie' : 10.000 }

]

# opret færdighedsdatarammen ud fra ovenstående data

skills_df = linuxhint_spark_app.createDataFrame(skills)

# Faktiske færdighedsdata

skills_df.show()

# Konverter til JSON-array

json_skills_data = skills_df.toJSON().collect()

print(json_skills_data)

Produktion:

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

| id|person|præmie| dygtighed|

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

| 123 | Skat| 25.000 | maleri|

| 112 | Mouni| 2000 |musik/dans|

| 153 |Tulasi| 1200 | læser|

| 173 | Løb| 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':'læsning'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'music'}' , '{'id':43,'person':'Kamala','prize':10000,'skill':'læsning'}' ]

Der er 5 rækker i PySpark DataFrame. Alle disse 5 rækker returneres som en ordbog over strenge, der er adskilt med komma.

PySpark DataFrame til JSON ved hjælp af Write.json()

Write.json()-metoden er tilgængelig i PySpark, som skriver/gemmer PySpark DataFrame til en JSON-fil. Det tager filnavnet/stien som en parameter. Grundlæggende returnerer det JSON i flere filer (partitionerede filer). For at flette dem alle sammen i en enkelt fil kan vi bruge coalesce() metoden.

Syntaks:

dataframe_object.coalesce( 1 ).write.json('filnavn')
  1. Tilføj tilstand – dataframe_object.write.mode(‘append’).json(‘file_name’)
  2. Overskrivningstilstand – dataframe_object.write.mode('overskriv').json('filnavn')

Det kan være muligt at tilføje/overskrive den eksisterende JSON. Ved at bruge write.mode() kan vi tilføje data ved at sende 'append' eller overskrive de eksisterende JSON-data ved at overføre 'overwrite' til denne funktion.

Eksempel 1:

Opret en 'skills_df' PySpark DataFrame med 3 rækker og 4 kolonner. Skriv denne DataFrame til JSON.

importere pyspark

importere pandaer

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# færdighedsdata med 3 rækker og 4 kolonner

færdigheder =[{ 'id' : 123 , 'person' : 'Honning' , 'evne' : 'maleri' , 'præmie' : 25.000 },

{ 'id' : 112 , 'person' : 'Mouni' , 'evne' : 'dans' , 'præmie' : 2000 },

{ 'id' : 153 , 'person' : 'Tulasi' , 'evne' : 'læsning' , 'præmie' : 1200 }

]

# opret færdighedsdatarammen ud fra ovenstående data

skills_df = linuxhint_spark_app.createDataFrame(skills)

# write.json()

skills_df.coalesce( 1 ).write.json( 'færdighedsdata' )

JSON fil:

Vi kan se, at mappen skills_data indeholder de partitionerede JSON-data.

Lad os åbne JSON-filen. Vi kan se, at alle rækkerne fra PySpark DataFrame er konverteret til JSON.

Der er 5 rækker i PySpark DataFrame. Alle disse 5 rækker returneres som en ordbog over strenge, der er adskilt med komma.

Eksempel 2:

Opret en 'skills2_df' PySpark DataFrame med en række. Føj en række til den forrige JSON-fil ved at angive tilstanden som 'tilføj'.

importere pyspark

importere pandaer

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

færdigheder2 =[{ 'id' : 78 , 'person' : 'Mary' , 'evne' : 'rider' , 'præmie' : 8960 }

]

# opret færdighedsdatarammen ud fra ovenstående data

skills2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() med tilføjelsestilstand.

skills2_df.write.mode( 'Tilføj' ).json( 'færdighedsdata' )

JSON fil:

Vi kan se de partitionerede JSON-filer. Den første fil indeholder de første DataFrame-poster, og den anden fil indeholder den anden DataFrame-record.

Konklusion

Der er tre forskellige måder at konvertere PySpark DataFrame til JSON. Først diskuterede vi to_json()-metoden, som konverterer til JSON ved at konvertere PySpark DataFrame til Pandas DataFrame med forskellige eksempler ved at overveje forskellige parametre. Dernæst brugte vi toJSON() metoden. Til sidst lærte vi, hvordan man bruger funktionen write.json() til at skrive PySpark DataFrame til JSON. Tilføjelse og overskrivning er mulig med denne funktion.