Téma obsahu:
- PySpark DataFrame to JSON pomocí To_json() s ToPandas()
- PySpark DataFrame na JSON pomocí ToJSON()
- PySpark DataFrame to JSON pomocí Write.json()
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,...)
- 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í“.
- 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 pysparkimportovat 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=Truejson_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 pysparkz 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’)- Režim připojení – dataframe_object.write.mode(‘append’).json(‘název_souboru’)
- 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 pysparkimportovat 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 pysparkimportovat 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í.