Mengonversi PySpark DataFrame ke JSON

Mengonversi Pyspark Dataframe Ke Json



Mengirimkan data terstruktur menggunakan JSON dimungkinkan dan juga menghabiskan sedikit memori. Jika dibandingkan dengan PySpark RDD atau PySpark DataFrame, JSON mengkonsumsi memori rendah dan serialisasi yang dimungkinkan dengan JSON. Kami dapat mengonversi PySpark DataFrame ke JSON menggunakan metode pyspark.sql.DataFrameWriter.json() . Selain itu, ada dua cara lain untuk mengonversi DataFrame ke JSON.

Topik Isi:

Mari pertimbangkan PySpark DataFrame sederhana di semua contoh dan ubah menjadi JSON menggunakan fungsi yang disebutkan.







Modul yang Diperlukan:

Instal pustaka PySpark di lingkungan Anda jika belum diinstal. Anda dapat merujuk ke perintah berikut untuk menginstalnya:



pip instal pyspark

PySpark DataFrame ke JSON Menggunakan To_json() dengan ToPandas()

Metode to_json() tersedia di modul Pandas yang mengubah Pandas DataFrame menjadi JSON. Kita dapat menggunakan metode ini jika mengonversi PySpark DataFrame menjadi Pandas DataFrame. Untuk mengonversi PySpark DataFrame ke Pandas DataFrame, metode toPandas() digunakan. Mari kita lihat sintaks to_json() beserta parameternya.



Sintaksis:





dataframe_object.toPandas().to_json(orient,indeks,...)
  1. Orient digunakan untuk menampilkan JSON yang dikonversi sebagai format yang diinginkan. Dibutuhkan 'catatan', 'tabel', 'nilai', 'kolom', 'indeks', 'split'.
  2. Indeks digunakan untuk memasukkan/menghapus indeks dari string JSON yang dikonversi. Jika disetel ke 'True', indeks ditampilkan. Jika tidak, indeks tidak akan ditampilkan jika orientasinya adalah 'split' atau 'table'.

Contoh 1: Orientasikan sebagai 'Rekaman'

Buat PySpark DataFrame “skills_df” dengan 3 baris dan 4 kolom. Ubah DataFrame ini menjadi JSON dengan menentukan parameter orient sebagai 'catatan'.

impor pyspark

impor panda

dari pyspark.sql impor SparkSession

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

# data keterampilan dengan 3 baris dan 4 kolom

keterampilan = [{ 'pengenal' : 123 , 'orang' : 'Sayang' , 'keahlian' : 'lukisan' , 'hadiah' : 25000 },

{ 'pengenal' : 112 , 'orang' : 'Mouni' , 'keahlian' : 'menari' , 'hadiah' : 2000 },

{ 'pengenal' : 153 , 'orang' : 'Tulasi' , 'keahlian' : 'membaca' , 'hadiah' : 1200 }

]

# buat kerangka data keterampilan dari data di atas

skills_df = linuxhint_spark_app.createDataFrame(keterampilan)

# Data keterampilan aktual

skills_df.show()

# Konversikan ke JSON menggunakan to_json() dengan orientasi sebagai 'catatan'

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

cetak(json_skills_data)

Keluaran:



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

| id|orang|hadiah| keterampilan|

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

| 123 | Sayang| 25000 |melukis|

| 112 | Mouni| 2000 | menari|

| 153 |Tulasi| 1200 | membaca|

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

[{ 'pengenal' : 123 , 'orang' : 'Sayang' , 'hadiah' : 25000 , 'keahlian' : 'lukisan' },{ 'pengenal' : 112 , 'orang' : 'Mouni' , 'hadiah' : 2000 , 'keahlian' : 'menari' },{ 'pengenal' : 153 , 'orang' : 'Tulasi' , 'hadiah' : 1200 , 'keahlian' : 'membaca' }]

Kita dapat melihat bahwa PySpark DataFrame dikonversi ke array JSON dengan kamus nilai. Di sini, kunci mewakili nama kolom dan nilai mewakili nilai baris/sel di PySpark DataFrame.

Contoh 2: Orientasikan sebagai “Split”

Format JSON yang dikembalikan oleh orientasi 'split' menyertakan nama kolom yang memiliki daftar kolom, daftar indeks, dan daftar data. Berikut ini adalah format orientasi 'split'.

# Konversikan ke JSON menggunakan to_json() dengan orient sebagai 'split'

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

cetak(json_skills_data)

Keluaran:

{ 'kolom' :[ 'pengenal' , 'orang' , 'hadiah' , 'keahlian' ], 'indeks' :[ 0 , 1 , 2 ], 'data' :[[ 123 , 'Sayang' , 25000 , 'lukisan' ],[ 112 , 'Mouni' , 2000 , 'menari' ],[ 153 , 'Tulasi' , 1200 , 'membaca' ]]}

Contoh 3: Orientasikan sebagai “Indeks”

Di sini, setiap baris dari PySpark DataFrame dihentikan dalam bentuk kamus dengan kunci sebagai nama kolom. Untuk setiap kamus, posisi indeks ditentukan sebagai kunci.

# Konversikan ke JSON menggunakan to_json() dengan orientasi sebagai 'indeks'

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

cetak(json_skills_data)

Keluaran:

{ '0' :{ 'pengenal' : 123 , 'orang' : 'Sayang' , 'hadiah' : 25000 , 'keahlian' : 'lukisan' }, '1' :{ 'pengenal' : 112 , 'orang' : 'Mouni' , 'hadiah' : 2000 , 'keahlian' : 'menari' }, '2' :{ 'pengenal' : 153 , 'orang' : 'Tulasi' , 'hadiah' : 1200 , 'keahlian' : 'membaca' }}

Contoh 4: Orientasikan sebagai 'Kolom'

Kolom adalah kunci untuk setiap catatan. Setiap kolom menyimpan kamus yang mengambil nilai kolom dengan nomor indeks.

# Konversikan ke JSON menggunakan to_json() dengan orientasi sebagai 'kolom'

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

cetak(json_skills_data)

Keluaran:

{ 'pengenal' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'orang' :{ '0' : 'Sayang' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'hadiah' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'keahlian' :{ '0' : 'lukisan' , '1' : 'menari' , '2' : 'membaca' }}

Contoh 5: Orientasikan sebagai “Nilai”

Jika Anda hanya membutuhkan nilai dalam JSON, Anda dapat menggunakan orientasi 'nilai'. Ini menampilkan setiap baris dalam daftar. Akhirnya, semua daftar disimpan dalam daftar. JSON ini adalah tipe daftar bersarang.

# Konversikan ke JSON menggunakan to_json() dengan orientasi sebagai 'nilai'

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

cetak(json_skills_data)

Keluaran:

[[ 123 , 'Sayang' , 25000 , 'lukisan' ],[ 112 , 'Mouni' , 2000 , 'menari' ],[ 153 , 'Tulasi' , 1200 , 'membaca' ]]

Contoh 6: Orientasikan sebagai 'Tabel'

Orientasi 'tabel' mengembalikan JSON yang menyertakan skema dengan nama bidang beserta tipe data kolom, indeks sebagai kunci utama, dan versi Pandas. Nama kolom dengan nilai ditampilkan sebagai 'data'.

# Konversikan ke JSON menggunakan to_json() dengan orientasi sebagai 'tabel'

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

cetak(json_skills_data)

Keluaran:

{ 'skema' :{ 'bidang' :[{ 'nama' : 'indeks' , 'jenis' : 'bilangan bulat' },{ 'nama' : 'pengenal' , 'jenis' : 'bilangan bulat' },{ 'nama' : 'orang' , 'jenis' : 'rangkaian' },{ 'nama' : 'hadiah' , 'jenis' : 'bilangan bulat' },{ 'nama' : 'keahlian' , 'jenis' : 'rangkaian' }], 'kunci utama' :[ 'indeks' ], 'versi_panda' : '1.4.0' }, 'data' :[{ 'indeks' : 0 , 'pengenal' : 123 , 'orang' : 'Sayang' , 'hadiah' : 25000 , 'keahlian' : 'lukisan' },{ 'indeks' : 1 , 'pengenal' : 112 , 'orang' : 'Mouni' , 'hadiah' : 2000 , 'keahlian' : 'menari' },{ 'indeks' : 2 , 'pengenal' : 153 , 'orang' : 'Tulasi' , 'hadiah' : 1200 , 'keahlian' : 'membaca' }]}

Contoh 7: Dengan Parameter Indeks

Pertama, kami melewatkan parameter indeks dengan menyetelnya ke 'True'. Anda akan melihat untuk setiap nilai kolom bahwa posisi indeks dikembalikan sebagai kunci dalam kamus.

Pada keluaran kedua, hanya nama kolom ('kolom') dan rekaman ('data') yang dikembalikan tanpa posisi indeks karena indeks disetel ke 'False'.

# Konversikan ke JSON menggunakan to_json() dengan index=True

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

cetak(json_skills_data, ' \N ' )

# Konversi ke JSON menggunakan to_json() dengan index=False

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

cetak(json_skills_data)

Keluaran:

{ 'pengenal' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'orang' :{ '0' : 'Sayang' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'hadiah' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'keahlian' :{ '0' : 'lukisan' , '1' : 'menari' , '2' : 'membaca' }}

{ 'kolom' :[ 'pengenal' , 'orang' , 'hadiah' , 'keahlian' ], 'data' :[[ 123 , 'Sayang' , 25000 , 'lukisan' ],[ 112 , 'Mouni' , 2000 , 'menari' ],[ 153 , 'Tulasi' , 1200 , 'membaca' ]]

PySpark DataFrame ke JSON Menggunakan ToJSON()

Metode toJSON() digunakan untuk mengonversi PySpark DataFrame menjadi objek JSON. Pada dasarnya, ini mengembalikan string JSON yang dikelilingi oleh daftar. Itu ['{kolom:nilai,...}',…. ] adalah format yang dikembalikan oleh fungsi ini. Di sini, setiap baris dari PySpark DataFrame dikembalikan sebagai kamus dengan nama kolom sebagai kuncinya.

Sintaksis:

dataframe_object.toJSON()

Dimungkinkan untuk melewatkan parameter seperti indeks, label kolom, dan tipe data.

Contoh:

Buat PySpark DataFrame “skills_df” dengan 5 baris dan 4 kolom. Ubah DataFrame ini menjadi JSON menggunakan metode toJSON().

impor pyspark

dari pyspark.sql impor SparkSession

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

# data keterampilan dengan 5 baris dan 4 kolom

keterampilan = [{ 'pengenal' : 123 , 'orang' : 'Sayang' , 'keahlian' : 'lukisan' , 'hadiah' : 25000 },

{ 'pengenal' : 112 , 'orang' : 'Mouni' , 'keahlian' : 'musik/tarian' , 'hadiah' : 2000 },

{ 'pengenal' : 153 , 'orang' : 'Tulasi' , 'keahlian' : 'membaca' , 'hadiah' : 1200 },

{ 'pengenal' : 173 , 'orang' : 'Lari' , 'keahlian' : 'musik' , 'hadiah' : 2000 },

{ 'pengenal' : 43 , 'orang' : 'Kamala' , 'keahlian' : 'membaca' , 'hadiah' : 10.000 }

]

# buat kerangka data keterampilan dari data di atas

skills_df = linuxhint_spark_app.createDataFrame(keterampilan)

# Data keterampilan aktual

skills_df.show()

# Konversikan ke larik JSON

json_skills_data = skills_df.toJSON().collect()

cetak(json_skills_data)

Keluaran:

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

| id|orang|hadiah| keterampilan|

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

| 123 | Sayang| 25000 | lukisan|

| 112 | Mouni| 2000 |musik/tarian|

| 153 |Tulasi| 1200 | membaca|

| 173 | Lari| 2000 | musik|

| 43 |Kamala| 10.000 | membaca|

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

[ '{'id':123,'person':'Sayang','hadiah':25000,'skill':'melukis'}' , '{'id':112,'person':'Mouni','hadiah':2000,'skill':'music/dance'}' , '{'id':153,'person':'Tulasi','hadiah':1200,'keterampilan':'membaca'}' , '{'id':173,'person':'Ran','hadiah':2000,'skill':'musik'}' , '{'id':43,'person':'Kamala','hadiah':10000,'keterampilan':'membaca'}' ]

Ada 5 baris di PySpark DataFrame. Semua 5 baris ini dikembalikan sebagai kamus string yang dipisahkan oleh koma.

PySpark DataFrame ke JSON Menggunakan Write.json()

Metode write.json() tersedia di PySpark yang menulis/menyimpan PySpark DataFrame ke file JSON. Dibutuhkan nama file/jalur sebagai parameter. Pada dasarnya, ini mengembalikan JSON dalam banyak file (file yang dipartisi). Untuk menggabungkan semuanya dalam satu file, kita dapat menggunakan metode coalesce().

Sintaksis:

dataframe_object.coalesce( 1 .write.json('nama_berkas')
  1. Tambahkan Mode – dataframe_object.write.mode('tambahkan').json('nama_file')
  2. Mode Timpa – dataframe_object.write.mode('overwrite').json('file_name')

Dimungkinkan untuk menambahkan/menimpa JSON yang ada. Menggunakan write.mode(), kita dapat menambahkan data dengan meneruskan 'tambahkan' atau menimpa data JSON yang ada dengan meneruskan 'menimpa' ke fungsi ini.

Contoh 1:

Buat PySpark DataFrame “skills_df” dengan 3 baris dan 4 kolom. Tulis DataFrame ini ke JSON.

impor pyspark

impor panda

dari pyspark.sql impor SparkSession

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

# data keterampilan dengan 3 baris dan 4 kolom

keterampilan = [{ 'pengenal' : 123 , 'orang' : 'Sayang' , 'keahlian' : 'lukisan' , 'hadiah' : 25000 },

{ 'pengenal' : 112 , 'orang' : 'Mouni' , 'keahlian' : 'menari' , 'hadiah' : 2000 },

{ 'pengenal' : 153 , 'orang' : 'Tulasi' , 'keahlian' : 'membaca' , 'hadiah' : 1200 }

]

# buat kerangka data keterampilan dari data di atas

skills_df = linuxhint_spark_app.createDataFrame(keterampilan)

# tulis.json()

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

Berkas JSON:

Kita dapat melihat bahwa folder skills_data menyertakan data JSON yang dipartisi.

Mari buka file JSON. Kita dapat melihat bahwa semua baris dari PySpark DataFrame diubah menjadi JSON.

Ada 5 baris di PySpark DataFrame. Semua 5 baris ini dikembalikan sebagai kamus string yang dipisahkan oleh koma.

Contoh 2:

Buat PySpark DataFrame “skills2_df” dengan satu baris. Tambahkan satu baris ke file JSON sebelumnya dengan menentukan mode sebagai 'tambahkan'.

impor pyspark

impor panda

dari pyspark.sql impor SparkSession

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

keterampilan2 =[{ 'pengenal' : 78 , 'orang' : 'Maria' , 'keahlian' : 'berkuda' , 'hadiah' : 8960 }

]

# buat kerangka data keterampilan dari data di atas

skills2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() dengan mode penambahan.

skills2_df.write.mode( 'menambahkan' ).json( 'skills_data' )

Berkas JSON:

Kita bisa melihat file JSON yang dipartisi. File pertama menyimpan record DataFrame pertama dan file kedua menyimpan record DataFrame kedua.

Kesimpulan

Ada tiga cara berbeda untuk mengonversi PySpark DataFrame ke JSON. Pertama, kita membahas metode to_json() yang mengonversi ke JSON dengan mengonversi PySpark DataFrame ke Pandas DataFrame dengan contoh berbeda dengan mempertimbangkan parameter berbeda. Selanjutnya, kami menggunakan metode toJSON(). Terakhir, kita belajar cara menggunakan fungsi write.json() untuk menulis PySpark DataFrame ke JSON. Menambahkan, dan menimpa dimungkinkan dengan fungsi ini.