Konvertieren von PySpark DataFrame in JSON

Konvertieren Von Pyspark Dataframe In Json



Die Übertragung strukturierter Daten mithilfe von JSON ist möglich und verbraucht ebenfalls wenig Speicher. Im Vergleich zu PySpark RDD oder PySpark DataFrame verbraucht JSON wenig Speicher und Serialisierung, was mit JSON möglich ist. Mit der Methode pyspark.sql.DataFrameWriter.json() können wir den PySpark DataFrame in JSON konvertieren. Darüber hinaus gibt es zwei weitere Möglichkeiten, den DataFrame in JSON zu konvertieren.

Inhaltsthema:

Betrachten wir in allen Beispielen einen einfachen PySpark DataFrame und konvertieren ihn mithilfe der genannten Funktionen in JSON.







Erforderliches Modul:

Installieren Sie die PySpark-Bibliothek in Ihrer Umgebung, falls sie noch nicht installiert ist. Sie können den folgenden Befehl verwenden, um es zu installieren:



Pip Pyspark installieren

PySpark DataFrame zu JSON mit To_json() mit ToPandas()

Die to_json()-Methode ist im Pandas-Modul verfügbar, die den Pandas DataFrame in JSON konvertiert. Wir können diese Methode verwenden, wenn wir unseren PySpark DataFrame in Pandas DataFrame konvertieren. Um den PySpark DataFrame in den Pandas DataFrame zu konvertieren, wird die toPandas()-Methode verwendet. Sehen wir uns die Syntax von to_json() zusammen mit seinen Parametern an.



Syntax:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Orient wird verwendet, um das konvertierte JSON als gewünschtes Format anzuzeigen. Es werden „Datensätze“, „Tabelle“, „Werte“, „Spalten“, „Index“, „Split“ benötigt.
  2. Index wird verwendet, um den Index in die konvertierte JSON-Zeichenfolge einzuschließen bzw. daraus zu entfernen. Wenn es auf „True“ gesetzt ist, werden die Indizes angezeigt. Andernfalls werden die Indizes nicht angezeigt, wenn der Orient „Split“ oder „Table“ ist.

Beispiel 1: Orientierung als „Records“

Erstellen Sie einen „skills_df“-PySpark-DataFrame mit 3 Zeilen und 4 Spalten. Konvertieren Sie diesen DataFrame in JSON, indem Sie den Orientierungsparameter als „records“ angeben.

Pyspark importieren

Pandas importieren

aus pyspark.sql SparkSession importieren

linuxhint_spark_app = SparkSession.builder.appName( „Linux-Hinweis“ ).getOrCreate()

# Kompetenzdaten mit 3 Zeilen und 4 Spalten

Fähigkeiten =[{ 'Ausweis' : 123 , 'Person' : 'Honig' , 'Fähigkeit' : 'malen' , 'Preis' : 25000 },

{ 'Ausweis' : 112 , 'Person' : 'Mouni' , 'Fähigkeit' : 'tanzen' , 'Preis' : 2000 },

{ 'Ausweis' : 153 , 'Person' : 'Tulasi' , 'Fähigkeit' : 'Lektüre' , 'Preis' : 1200 }

]

# Erstellen Sie den Skills-Datenrahmen aus den oben genannten Daten

skills_df = linuxhint_spark_app.createDataFrame(skills)

# Tatsächliche Kompetenzdaten

skills_df.show()

# Konvertieren Sie in JSON mit to_json() mit orient als „records“

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

print(json_skills_data)

Ausgang:



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

| id|person|preis| Geschick|

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

| 123 | Schatz| 25000 |Malerei|

| 112 | Mouni| 2000 | tanzen|

| 153 |Tulasi| 1200 | lesen|

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

[{ 'Ausweis' : 123 , 'Person' : 'Honig' , 'Preis' : 25000 , 'Fähigkeit' : 'malen' },{ 'Ausweis' : 112 , 'Person' : „Mouni“ , 'Preis' : 2000 , 'Fähigkeit' : 'tanzen' },{ 'Ausweis' : 153 , 'Person' : „Tulasi“ , 'Preis' : 1200 , 'Fähigkeit' : 'Lektüre' }]

Wir können sehen, dass der PySpark DataFrame mit einem Wertewörterbuch in das JSON-Array konvertiert wird. Hier stellen die Schlüssel den Spaltennamen und der Wert den Zeilen-/Zellenwert im PySpark DataFrame dar.

Beispiel 2: Orientieren als „Split“

Das vom „Split“-Orient zurückgegebene JSON-Format umfasst die Spaltennamen, die eine Liste von Spalten, eine Liste von Indizes und eine Liste von Daten enthalten. Das Folgende ist das Format des „geteilten“ Orients.

# Konvertieren Sie in JSON mit to_json() mit orient als „split“

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

print(json_skills_data)

Ausgang:

{ 'Säulen' :[ 'Ausweis' , 'Person' , 'Preis' , 'Fähigkeit' ], 'Index' :[ 0 , 1 , 2 ], 'Daten' :[[ 123 , 'Honig' , 25000 , 'malen' ],[ 112 , „Mouni“ , 2000 , 'tanzen' ],[ 153 , „Tulasi“ , 1200 , 'Lektüre' ]]}

Beispiel 3: Orient als „Index“

Hier wird jede Zeile aus dem PySpark DataFrame in Form eines Wörterbuchs mit dem Schlüssel als Spaltennamen zurückgezogen. Für jedes Wörterbuch wird die Indexposition als Schlüssel angegeben.

# Konvertieren Sie in JSON mit to_json() und orient als „Index“.

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

print(json_skills_data)

Ausgang:

{ „0“ :{ 'Ausweis' : 123 , 'Person' : 'Honig' , 'Preis' : 25000 , 'Fähigkeit' : 'malen' }, „1“ :{ 'Ausweis' : 112 , 'Person' : „Mouni“ , 'Preis' : 2000 , 'Fähigkeit' : 'tanzen' }, „2“ :{ 'Ausweis' : 153 , 'Person' : „Tulasi“ , 'Preis' : 1200 , 'Fähigkeit' : 'Lektüre' }}

Beispiel 4: Orientieren als „Spalten“

Spalten sind der Schlüssel für jeden Datensatz. Jede Spalte enthält ein Wörterbuch, das die Spaltenwerte mit Indexnummern aufnimmt.

# Konvertieren Sie in JSON mit to_json() und orient als „Spalten“.

json_skills_data = skills_df.toPandas().to_json(orient= 'Säulen' )

print(json_skills_data)

Ausgang:

{ 'Ausweis' :{ „0“ : 123 , „1“ : 112 , „2“ : 153 }, 'Person' :{ „0“ : 'Honig' , „1“ : „Mouni“ , „2“ : „Tulasi“ }, 'Preis' :{ „0“ : 25000 , „1“ : 2000 , „2“ : 1200 }, 'Fähigkeit' :{ „0“ : 'malen' , „1“ : 'tanzen' , „2“ : 'Lektüre' }}

Beispiel 5: Orientierung als „Werte“

Wenn Sie nur die Werte in JSON benötigen, können Sie sich für die „Werte“-Orientierung entscheiden. Es zeigt jede Zeile in einer Liste an. Abschließend werden alle Listen in einer Liste gespeichert. Dieses JSON ist vom Typ einer verschachtelten Liste.

# Konvertieren Sie in JSON mit to_json() und orient als „Werte“.

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

print(json_skills_data)

Ausgang:

[[ 123 , 'Honig' , 25000 , 'malen' ],[ 112 , „Mouni“ , 2000 , 'tanzen' ],[ 153 , „Tulasi“ , 1200 , 'Lektüre' ]]

Beispiel 6: Als „Tabelle“ ausrichten

Der „Tabellen“-Orient gibt den JSON zurück, der das Schema mit Feldnamen zusammen mit den Spaltendatentypen, dem Index als Primärschlüssel und der Pandas-Version enthält. Die Spaltennamen mit Werten werden als „Daten“ angezeigt.

# Konvertieren Sie in JSON mit to_json() und orient als „Tabelle“.

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

print(json_skills_data)

Ausgang:

{ 'Schema' :{ „Felder“ :[{ 'Name' : 'Index' , 'Typ' : 'ganze Zahl' },{ 'Name' : 'Ausweis' , 'Typ' : 'ganze Zahl' },{ 'Name' : 'Person' , 'Typ' : „Zeichenfolge“ },{ 'Name' : 'Preis' , 'Typ' : 'ganze Zahl' },{ 'Name' : 'Fähigkeit' , 'Typ' : „Zeichenfolge“ }], 'Primärschlüssel' :[ 'Index' ], „pandas_version“ : „1.4.0“ }, 'Daten' :[{ 'Index' : 0 , 'Ausweis' : 123 , 'Person' : 'Honig' , 'Preis' : 25000 , 'Fähigkeit' : 'malen' },{ 'Index' : 1 , 'Ausweis' : 112 , 'Person' : „Mouni“ , 'Preis' : 2000 , 'Fähigkeit' : 'tanzen' },{ 'Index' : 2 , 'Ausweis' : 153 , 'Person' : „Tulasi“ , 'Preis' : 1200 , 'Fähigkeit' : 'Lektüre' }]}

Beispiel 7: Mit Indexparameter

Zuerst übergeben wir den Indexparameter, indem wir ihn auf „True“ setzen. Sie sehen für jeden Spaltenwert, dass die Indexposition als Schlüssel in einem Wörterbuch zurückgegeben wird.

In der zweiten Ausgabe werden nur die Spaltennamen („columns“) und Datensätze („data“) ohne die Indexpositionen zurückgegeben, da der Index auf „False“ gesetzt ist.

# Konvertieren Sie in JSON mit to_json() mit index=True

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

print(json_skills_data, ' \N ' )

# Konvertieren Sie in JSON mit to_json() mit index=False

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

print(json_skills_data)

Ausgang:

{ 'Ausweis' :{ „0“ : 123 , „1“ : 112 , „2“ : 153 }, 'Person' :{ „0“ : 'Honig' , „1“ : „Mouni“ , „2“ : „Tulasi“ }, 'Preis' :{ „0“ : 25000 , „1“ : 2000 , „2“ : 1200 }, 'Fähigkeit' :{ „0“ : 'malen' , „1“ : 'tanzen' , „2“ : 'Lektüre' }}

{ 'Säulen' :[ 'Ausweis' , 'Person' , 'Preis' , 'Fähigkeit' ], 'Daten' :[[ 123 , 'Honig' , 25000 , 'malen' ],[ 112 , „Mouni“ , 2000 , 'tanzen' ],[ 153 , „Tulasi“ , 1200 , 'Lektüre' ]]

PySpark DataFrame zu JSON mit ToJSON()

Die toJSON()-Methode wird verwendet, um den PySpark DataFrame in ein JSON-Objekt zu konvertieren. Im Grunde gibt es einen JSON-String zurück, der von einer Liste umgeben ist. Der [‘{column:value,…}’,…. ] ist das Format, das von dieser Funktion zurückgegeben wird. Hier wird jede Zeile aus dem PySpark DataFrame als Wörterbuch mit dem Spaltennamen als Schlüssel zurückgegeben.

Syntax:

dataframe_object.toJSON()

Es kann möglich sein, Parameter wie Index, Spaltenbezeichnungen und Datentyp zu übergeben.

Beispiel:

Erstellen Sie einen PySpark-DataFrame „skills_df“ mit 5 Zeilen und 4 Spalten. Konvertieren Sie diesen DataFrame mit der Methode toJSON() in JSON.

Pyspark importieren

aus pyspark.sql SparkSession importieren

linuxhint_spark_app = SparkSession.builder.appName( „Linux-Hinweis“ ).getOrCreate()

# Kompetenzdaten mit 5 Zeilen und 4 Spalten

Fähigkeiten =[{ 'Ausweis' : 123 , 'Person' : 'Honig' , 'Fähigkeit' : 'malen' , 'Preis' : 25000 },

{ 'Ausweis' : 112 , 'Person' : 'Mouni' , 'Fähigkeit' : 'Musik/Tanz' , 'Preis' : 2000 },

{ 'Ausweis' : 153 , 'Person' : 'Tulasi' , 'Fähigkeit' : 'Lektüre' , 'Preis' : 1200 },

{ 'Ausweis' : 173 , 'Person' : 'Ran' , 'Fähigkeit' : 'Musik' , 'Preis' : 2000 },

{ 'Ausweis' : 43 , 'Person' : 'Kamala' , 'Fähigkeit' : 'Lektüre' , 'Preis' : 10000 }

]

# Erstellen Sie den Skills-Datenrahmen aus den oben genannten Daten

skills_df = linuxhint_spark_app.createDataFrame(skills)

# Tatsächliche Kompetenzdaten

skills_df.show()

# In JSON-Array konvertieren

json_skills_data = skills_df.toJSON().collect()

print(json_skills_data)

Ausgang:

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

| id|person|preis| Geschick|

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

| 123 | Schatz| 25000 | Malerei |

| 112 | Mouni| 2000 |Musik/Tanz|

| 153 |Tulasi| 1200 | lesen|

| 173 | Ran| 2000 | Musik|

| 43 |Kamala| 10000 | lesen|

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

[ '{'id':123,'person':Honig,'prize':25000,'skill':'malen'}' , '{'id':112,'person':Mouni',prize':2000,'skill':music/dance'}' , '{'id':153,'person':Tulasi',prize':1200,'skill':reading'}' , '{'id':173,'person':Ran',prize':2000,'skill'::music'}' , '{'id':43,'person':Kamala',prize':10000,'skill':reading'}' ]

Der PySpark DataFrame enthält 5 Zeilen. Alle diese 5 Zeilen werden als Wörterbuch mit durch Kommas getrennten Zeichenfolgen zurückgegeben.

PySpark DataFrame zu JSON mit Write.json()

In PySpark ist die Methode write.json() verfügbar, die den PySpark DataFrame in eine JSON-Datei schreibt/speichert. Als Parameter wird der Dateiname/Pfad verwendet. Grundsätzlich wird JSON in mehreren Dateien (partitionierten Dateien) zurückgegeben. Um sie alle in einer einzigen Datei zusammenzuführen, können wir die Methode „coalesce()“ verwenden.

Syntax:

dataframe_object.coalesce( 1 ).write.json(‘file_name’)
  1. Anhängemodus – dataframe_object.write.mode('append').json('file_name')
  2. Überschreibmodus – dataframe_object.write.mode('overwrite').json('file_name')

Es kann möglich sein, den vorhandenen JSON anzuhängen/zu überschreiben. Mit write.mode() können wir die Daten anhängen, indem wir „append“ übergeben, oder die vorhandenen JSON-Daten überschreiben, indem wir „overwrite“ an diese Funktion übergeben.

Beispiel 1:

Erstellen Sie einen „skills_df“-PySpark-DataFrame mit 3 Zeilen und 4 Spalten. Schreiben Sie diesen DataFrame in JSON.

Pyspark importieren

Pandas importieren

aus pyspark.sql SparkSession importieren

linuxhint_spark_app = SparkSession.builder.appName( „Linux-Hinweis“ ).getOrCreate()

# Kompetenzdaten mit 3 Zeilen und 4 Spalten

Fähigkeiten =[{ 'Ausweis' : 123 , 'Person' : 'Honig' , 'Fähigkeit' : 'malen' , 'Preis' : 25000 },

{ 'Ausweis' : 112 , 'Person' : 'Mouni' , 'Fähigkeit' : 'tanzen' , 'Preis' : 2000 },

{ 'Ausweis' : 153 , 'Person' : 'Tulasi' , 'Fähigkeit' : 'Lektüre' , 'Preis' : 1200 }

]

# Erstellen Sie den Skills-Datenrahmen aus den oben genannten Daten

skills_df = linuxhint_spark_app.createDataFrame(skills)

# write.json()

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

JSON-Datei:

Wir können sehen, dass der Ordner skills_data die partitionierten JSON-Daten enthält.

Öffnen wir die JSON-Datei. Wir können sehen, dass alle Zeilen aus dem PySpark DataFrame in JSON konvertiert werden.

Der PySpark DataFrame enthält 5 Zeilen. Alle diese 5 Zeilen werden als Wörterbuch mit durch Kommas getrennten Zeichenfolgen zurückgegeben.

Beispiel 2:

Erstellen Sie einen PySpark-DataFrame „skills2_df“ mit einer Zeile. Hängen Sie eine Zeile an die vorherige JSON-Datei an, indem Sie den Modus als „anhängen“ angeben.

Pyspark importieren

Pandas importieren

aus pyspark.sql SparkSession importieren

linuxhint_spark_app = SparkSession.builder.appName( „Linux-Hinweis“ ).getOrCreate()

Fähigkeiten2 =[{ 'Ausweis' : 78 , 'Person' : 'Maria' , 'Fähigkeit' : 'Reiten' , 'Preis' : 8960 }

]

# Erstellen Sie den Skills-Datenrahmen aus den oben genannten Daten

skills2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() mit Anhängemodus.

skills2_df.write.mode( 'anhängen' ).json( 'skills_data' )

JSON-Datei:

Wir können die partitionierten JSON-Dateien sehen. Die erste Datei enthält die ersten DataFrame-Datensätze und die zweite Datei enthält den zweiten DataFrame-Datensatz.

Abschluss

Es gibt drei verschiedene Möglichkeiten, den PySpark DataFrame in JSON zu konvertieren. Zuerst haben wir die to_json()-Methode besprochen, die in JSON konvertiert, indem sie den PySpark-DataFrame in den Pandas-DataFrame konvertiert, anhand verschiedener Beispiele und unter Berücksichtigung verschiedener Parameter. Als nächstes haben wir die toJSON()-Methode verwendet. Zuletzt haben wir gelernt, wie man mit der Funktion write.json() den PySpark DataFrame in JSON schreibt. Anhängen und Überschreiben sind mit dieser Funktion möglich.