Převod PySpark DataFrame na JSON

Prevod Pyspark Dataframe Na Json



Přenos strukturovaných dat pomocí JSON je možný a také spotřebovává málo paměti. Ve srovnání s PySpark RDD nebo PySpark DataFrame spotřebovává JSON málo paměti a serializace, což je u JSON možné. Jsme schopni převést PySpark DataFrame na JSON pomocí metody pyspark.sql.DataFrameWriter.json(). Kromě toho existují dva další způsoby převodu DataFrame na JSON.

Téma obsahu:

Uvažujme ve všech příkladech jednoduchý PySpark DataFrame a převeďte jej do JSON pomocí zmíněných funkcí.







Požadovaný modul:

Nainstalujte knihovnu PySpark do svého prostředí, pokud ještě není nainstalována. Chcete-li jej nainstalovat, můžete použít následující příkaz:



pip nainstalovat pyspark

PySpark DataFrame to JSON pomocí To_json() s ToPandas()

Metoda to_json() je dostupná v modulu Pandas, který převádí Pandas DataFrame na JSON. Tuto metodu můžeme využít, pokud převedeme náš PySpark DataFrame na Pandas DataFrame. Aby bylo možné převést PySpark DataFrame na Pandas DataFrame, použije se metoda toPandas(). Podívejme se na syntaxi to_json() spolu s jejími parametry.



Syntax:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Orient se používá k zobrazení převedeného JSON jako požadovaného formátu. Vyžaduje „záznamy“, „tabulku“, „hodnoty“, „sloupce“, „index“, „rozdělení“.
  2. Index se používá k zahrnutí/odstranění indexu z převedeného řetězce JSON. Pokud je nastaveno na „True“, zobrazí se indexy. Jinak se indexy nezobrazí, pokud je orientace „rozdělená“ nebo „tabulka“.

Příklad 1: Orientace jako „Záznamy“

Vytvořte „skills_df“ PySpark DataFrame se 3 řádky a 4 sloupci. Převeďte tento DataFrame na JSON zadáním parametru orient jako „záznamy“.

importovat pyspark

importovat pandy

z pyspark.sql importujte SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()

# data dovedností se 3 řádky a 4 sloupci

dovednosti =[{ 'id' : 123 , 'osoba' : 'Miláček' , 'dovednost' : 'malování' , 'cena' : 25 000 },

{ 'id' : 112 , 'osoba' : 'Mouni' , 'dovednost' : 'tanec' , 'cena' : 2000 },

{ 'id' : 153 , 'osoba' : 'Tulasi' , 'dovednost' : 'čtení' , 'cena' : 1200 }

]

# vytvořte datový rámec dovedností z výše uvedených dat

skills_df = linuxhint_spark_app.createDataFrame(dovednosti)

# Údaje o skutečných dovednostech

skills_df.show()

# Převeďte na JSON pomocí to_json() s orientací jako 'záznamy'

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

print(json_skills_data)

Výstup:



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

| id|osoba|cena| dovednost|

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

| 123 | Zlato| 25 000 |malba|

| 112 | Mouni| 2000 | tanec|

| 153 |Tulasi| 1200 | čtení|

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

[{ 'id' : 123 , 'osoba' : 'Miláček' , 'cena' : 25 000 , 'dovednost' : 'malování' },{ 'id' : 112 , 'osoba' : 'Mouni' , 'cena' : 2000 , 'dovednost' : 'tanec' },{ 'id' : 153 , 'osoba' : 'tulasi' , 'cena' : 1200 , 'dovednost' : 'čtení' }]

Vidíme, že PySpark DataFrame je převeden na pole JSON se slovníkem hodnot. Zde klíče představují název sloupce a hodnota představuje hodnotu řádku/buňky v PySpark DataFrame.

Příklad 2: Orientovat jako „Rozdělit“

Formát JSON, který je vrácen „rozděleným“ orientem, zahrnuje názvy sloupců, které mají seznam sloupců, seznam indexů a seznam dat. Následuje formát „rozděleného“ orientu.

# Převeďte na JSON pomocí to_json() s orientací jako 'split'

json_skills_data = skills_df.toPandas().to_json(orient= 'rozdělit' )

print(json_skills_data)

Výstup:

{ 'sloupce' :[ 'id' , 'osoba' , 'cena' , 'dovednost' ], 'index' :[ 0 , 1 , 2 ], 'data' :[[ 123 , 'Miláček' , 25 000 , 'malování' ],[ 112 , 'Mouni' , 2000 , 'tanec' ],[ 153 , 'tulasi' , 1200 , 'čtení' ]]}

Příklad 3: Orientace jako „Index“

Zde je každý řádek z PySpark DataFrame vyřazen ve formě slovníku s klíčem jako názvem sloupce. Pro každý slovník je pozice indexu určena jako klíč.

# Převeďte na JSON pomocí to_json() s orientací jako 'index'

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

print(json_skills_data)

Výstup:

{ '0' :{ 'id' : 123 , 'osoba' : 'Miláček' , 'cena' : 25 000 , 'dovednost' : 'malování' }, '1' :{ 'id' : 112 , 'osoba' : 'Mouni' , 'cena' : 2000 , 'dovednost' : 'tanec' }, '2' :{ 'id' : 153 , 'osoba' : 'tulasi' , 'cena' : 1200 , 'dovednost' : 'čtení' }}

Příklad 4: Orientovat jako „Sloupce“

Sloupce jsou klíčem pro každý záznam. Každý sloupec obsahuje slovník, který přebírá hodnoty sloupců s čísly indexu.

# Převeďte na JSON pomocí to_json() s orientací jako 'sloupce'

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

print(json_skills_data)

Výstup:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'osoba' :{ '0' : 'Miláček' , '1' : 'Mouni' , '2' : 'tulasi' }, 'cena' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'dovednost' :{ '0' : 'malování' , '1' : 'tanec' , '2' : 'čtení' }}

Příklad 5: Orientace jako „Hodnoty“

Pokud potřebujete pouze hodnoty v JSON, můžete přejít na orientaci „hodnoty“. Zobrazí každý řádek v seznamu. Nakonec jsou všechny seznamy uloženy v seznamu. Tento JSON je typu vnořeného seznamu.

# Převeďte na JSON pomocí to_json() s orientací jako 'hodnoty'

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

print(json_skills_data)

Výstup:

[[ 123 , 'Miláček' , 25 000 , 'malování' ],[ 112 , 'Mouni' , 2000 , 'tanec' ],[ 153 , 'tulasi' , 1200 , 'čtení' ]]

Příklad 6: Orientace jako „stůl“

Orientace „tabulky“ vrací JSON, který obsahuje schéma s názvy polí spolu s datovými typy sloupců, indexem jako primárním klíčem a verzí Pandas. Názvy sloupců s hodnotami jsou zobrazeny jako „data“.

# Převeďte na JSON pomocí to_json() s orientací jako 'tabulka'

json_skills_data = skills_df.toPandas().to_json(orient= 'stůl' )

print(json_skills_data)

Výstup:

{ 'schéma' :{ 'pole' :[{ 'název' : 'index' , 'typ' : 'celé číslo' },{ 'název' : 'id' , 'typ' : 'celé číslo' },{ 'název' : 'osoba' , 'typ' : 'tětiva' },{ 'název' : 'cena' , 'typ' : 'celé číslo' },{ 'název' : 'dovednost' , 'typ' : 'tětiva' }], 'primární klíč' :[ 'index' ], 'pandas_version' : '1.4.0' }, 'data' :[{ 'index' : 0 , 'id' : 123 , 'osoba' : 'Miláček' , 'cena' : 25 000 , 'dovednost' : 'malování' },{ 'index' : 1 , 'id' : 112 , 'osoba' : 'Mouni' , 'cena' : 2000 , 'dovednost' : 'tanec' },{ 'index' : 2 , 'id' : 153 , 'osoba' : 'tulasi' , 'cena' : 1200 , 'dovednost' : 'čtení' }]}

Příklad 7: S parametrem Index

Nejprve předáme parametr index nastavením na „True“. U každé hodnoty sloupce uvidíte, že pozice indexu je vrácena jako klíč ve slovníku.

Ve druhém výstupu jsou vráceny pouze názvy sloupců („sloupce“) a záznamy („data“) bez pozic indexu, protože index je nastaven na „False“.

# Převeďte na JSON pomocí to_json() s index=True

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

print(json_skills_data, ' \n ' )

# Převeďte na JSON pomocí to_json() s index=False

json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'rozdělit' )

print(json_skills_data)

Výstup:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'osoba' :{ '0' : 'Miláček' , '1' : 'Mouni' , '2' : 'tulasi' }, 'cena' :{ '0' : 25 000 , '1' : 2000 , '2' : 1200 }, 'dovednost' :{ '0' : 'malování' , '1' : 'tanec' , '2' : 'čtení' }}

{ 'sloupce' :[ 'id' , 'osoba' , 'cena' , 'dovednost' ], 'data' :[[ 123 , 'Miláček' , 25 000 , 'malování' ],[ 112 , 'Mouni' , 2000 , 'tanec' ],[ 153 , 'tulasi' , 1200 , 'čtení' ]]

PySpark DataFrame na JSON pomocí ToJSON()

Metoda toJSON() se používá k převodu datového rámce PySpark na objekt JSON. V podstatě vrací řetězec JSON, který je obklopen seznamem. The [‘{column:value,…}‘,…. ] je formát vrácený touto funkcí. Zde je každý řádek z PySpark DataFrame vrácen jako slovník s názvem sloupce jako klíčem.

Syntax:

dataframe_object.toJSON()

Je možné předávat parametry, jako je index, popisky sloupců a datový typ.

Příklad:

Vytvořte „skills_df“ PySpark DataFrame s 5 řádky a 4 sloupci. Převeďte tento DataFrame na JSON pomocí metody toJSON().

importovat pyspark

z pyspark.sql importujte SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()

# data dovedností s 5 řádky a 4 sloupci

dovednosti =[{ 'id' : 123 , 'osoba' : 'Miláček' , 'dovednost' : 'malování' , 'cena' : 25 000 },

{ 'id' : 112 , 'osoba' : 'Mouni' , 'dovednost' : 'hudba/tanec' , 'cena' : 2000 },

{ 'id' : 153 , 'osoba' : 'Tulasi' , 'dovednost' : 'čtení' , 'cena' : 1200 },

{ 'id' : 173 , 'osoba' : 'Běžel' , 'dovednost' : 'hudba' , 'cena' : 2000 },

{ 'id' : 43 , 'osoba' : 'Kamala' , 'dovednost' : 'čtení' , 'cena' : 10 000 }

]

# vytvořte datový rámec dovedností z výše uvedených dat

skills_df = linuxhint_spark_app.createDataFrame(dovednosti)

# Údaje o skutečných dovednostech

skills_df.show()

# Převést na pole JSON

json_skills_data = skills_df.toJSON().collect()

print(json_skills_data)

Výstup:

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

| id|osoba|cena| dovednost|

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

| 123 | Zlato| 25 000 | malování|

| 112 | Mouni| 2000 |hudba/tanec|

| 153 |Tulasi| 1200 | čtení|

| 173 | Ran| 2000 | hudba|

| 43 |Kamala| 10 000 | čtení|

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

[ '{'id':123,'person':'Zlato','prize':25000,'skill':'painting'}' , '{'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'}' ]

V PySpark DataFrame je 5 řádků. Všech těchto 5 řádků je vráceno jako slovník řetězců, které jsou odděleny čárkou.

PySpark DataFrame to JSON pomocí Write.json()

V PySpark je k dispozici metoda write.json(), která zapisuje/ukládá PySpark DataFrame do souboru JSON. Jako parametr bere název souboru/cestu. V zásadě vrací JSON ve více souborech (rozdělených souborech). Ke sloučení všech do jednoho souboru můžeme použít metodu coalesce().

Syntax:

dataframe_object.coalesce( 1 ).write.json(‘název_souboru’)
  1. Režim připojení – dataframe_object.write.mode(‘append’).json(‘název_souboru’)
  2. Režim přepisování - dataframe_object.write.mode(‘overwrite’).json(‘název_souboru’)

Je možné připojit/přepsat existující JSON. Pomocí write.mode() můžeme připojit data předáním „append“ nebo přepsat existující data JSON předáním „overwrite“ této funkci.

Příklad 1:

Vytvořte „skills_df“ PySpark DataFrame se 3 řádky a 4 sloupci. Zapište tento DataFrame do JSON.

importovat pyspark

importovat pandy

z pyspark.sql importujte SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()

# data dovedností se 3 řádky a 4 sloupci

dovednosti =[{ 'id' : 123 , 'osoba' : 'Miláček' , 'dovednost' : 'malování' , 'cena' : 25 000 },

{ 'id' : 112 , 'osoba' : 'Mouni' , 'dovednost' : 'tanec' , 'cena' : 2000 },

{ 'id' : 153 , 'osoba' : 'Tulasi' , 'dovednost' : 'čtení' , 'cena' : 1200 }

]

# vytvořte datový rámec dovedností z výše uvedených dat

skills_df = linuxhint_spark_app.createDataFrame(dovednosti)

# write.json()

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

Soubor JSON:

Vidíme, že složka skills_data obsahuje rozdělená data JSON.

Otevřeme soubor JSON. Vidíme, že všechny řádky z PySpark DataFrame jsou převedeny na JSON.

V PySpark DataFrame je 5 řádků. Všech těchto 5 řádků je vráceno jako slovník řetězců, které jsou odděleny čárkou.

Příklad 2:

Vytvořte „skills2_df“ PySpark DataFrame s jedním řádkem. Připojte jeden řádek k předchozímu souboru JSON zadáním režimu jako „připojit“.

importovat pyspark

importovat pandy

z pyspark.sql importujte SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()

dovednosti2 =[{ 'id' : 78 , 'osoba' : 'Mary' , 'dovednost' : 'jezdectví' , 'cena' : 8960 }

]

# vytvořte datový rámec dovedností z výše uvedených dat

skills2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() s režimem připojení.

skills2_df.write.mode( 'připojit' .json( 'skills_data' )

Soubor JSON:

Můžeme vidět rozdělené soubory JSON. První soubor obsahuje první záznamy DataFrame a druhý soubor obsahuje druhý záznam DataFrame.

Závěr

Existují tři různé způsoby, jak převést PySpark DataFrame na JSON. Nejprve jsme diskutovali o metodě to_json(), která převádí na JSON převodem PySpark DataFrame na Pandas DataFrame s různými příklady s ohledem na různé parametry. Dále jsme použili metodu toJSON(). Nakonec jsme se naučili, jak používat funkci write.json() k zápisu PySpark DataFrame do JSON. Tato funkce umožňuje připojování a přepisování.