PySpark Baca JSON()

Pyspark Baca Json



Semasa bekerja dengan PySpark DataFrames, ia perlu disimpan dalam PySpark DataFrame jika anda ingin memproses data JSON. Selepas menyimpan dalam DataFrame, kami boleh menggunakan operasi dan kaedah yang berbeza pada data. Selain itu, terdapat begitu banyak kelebihan jika kita menukar JSON kepada PySpark DataFrame kerana ia mudah dan kita boleh mengubah/memisahkan data dengan cara yang lebih mudah.

Topik Kandungan:

Membaca JSON ke dalam PySpark DataFrame Menggunakan Pandas.read_json()







Membaca JSON ke PySpark DataFrame Menggunakan Spark.read.json()



Membaca JSON ke PySpark DataFrame Menggunakan PySpark SQL



Dalam tutorial ini, kita akan melihat cara membaca JSON ke dalam PySpark DataFrame menggunakan pandas.read_json(), spark.read.json(), dan spark.sql. Dalam semua senario, kita akan melihat contoh yang berbeza dengan mempertimbangkan format JSON yang berbeza.





Pasang perpustakaan PySpark sebelum melaksanakan contoh berikut.

pip pasang pyspark

Selepas pemasangan berjaya, anda boleh melihat output seperti berikut:



Membaca JSON ke dalam PySpark DataFrame Menggunakan Pandas.read_json()

Dalam PySpark, kaedah createDataFrame() digunakan untuk mencipta DataFrame secara langsung. Di sini, kita hanya perlu menghantar fail/laluan JSON ke fail JSON melalui kaedah pandas.read_json(). Kaedah read_json() ini mengambil nama fail/laluan yang tersedia dalam modul Pandas. Inilah sebabnya mengapa perlu mengimport dan menggunakan modul Pandas.

Sintaks:

spark_app.createDataFrame(pandas.read_json( 'file_name.json' ))

Contoh:

Mari buat fail JSON bernama 'student_skill.json' yang menyimpan 2 rekod. Di sini, kunci/lajur ialah 'Pelajar 1' dan 'Pelajar 2'. Baris tersebut ialah nama, umur, kemahiran1 dan kemahiran2.

import pyspark

import panda

daripada pyspark.sql import SparkSession

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

# Menggunakan pandas.read_json()

candidate_skills = linuxhint_spark_app.createDataFrame(pandas.read_json( 'student_skill.json' ))

candidate_skills.show()

Pengeluaran:

Kita dapat melihat bahawa data JSON ditukar kepada PySpark DataFrame dengan lajur dan baris tertentu.

2. Membaca JSON ke PySpark DataFrame Menggunakan Spark.read.json()

Read.json() ialah kaedah yang serupa dengan read_json() dalam Pandas. Di sini, read.json() mengambil laluan ke JSON atau terus ke fail JSON dan terus memuatkannya ke dalam PySpark DataFrame. Tidak perlu menggunakan kaedah createDataFrame() dalam senario ini. Jika anda ingin membaca berbilang fail JSON pada satu masa, kami perlu menghantar senarai nama fail JSON melalui senarai yang dipisahkan dengan koma. Semua rekod JSON disimpan dalam satu DataFrame.

Sintaks:

Fail Tunggal - spark_app.read.json( 'file_name.json' )

Berbilang Fail - spark_app.read.json([ 'file1.json' , 'file2.json' ,...])

Senario 1: Baca JSON Having Single Line

Jika fail JSON anda berada dalam format record1, record2, record3… (baris tunggal), kami boleh memanggilnya sebagai JSON dengan satu baris. Spark memproses rekod ini dan menyimpannya dalam PySpark DataFrame sebagai baris. Setiap rekod ialah satu baris dalam PySpark DataFrame.

Mari buat fail JSON bernama 'candidate_skills.json' yang menyimpan 3 rekod. Baca JSON ini ke dalam PySpark DataFrame.

import pyspark

daripada pyspark.sql import SparkSession

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

# Baca candidate_skills.json ke dalam PySpark DataFrame

candidate_skills = linuxhint_spark_app.read.json( 'candidate_skills.json' )

candidate_skills.show()

Pengeluaran:

Kita dapat melihat bahawa data JSON ditukar kepada PySpark DataFrame dengan rekod dan nama lajur yang ditentukan.

Senario 2: Baca JSON Mempunyai Berbilang Baris

Jika fail JSON anda mempunyai berbilang baris, anda perlu menggunakan kaedah read.option().json() untuk menghantar parameter berbilang baris yang perlu ditetapkan kepada benar. Ini membolehkan kami memuatkan JSON yang mempunyai berbilang baris ke dalam PySpark DataFrame.

read.option( 'berbilang baris' , 'benar' ).json( 'nama_fail.json' )

Mari buat fail JSON bernama 'multi.json' yang menyimpan 3 rekod. Baca JSON ini ke dalam PySpark DataFrame.

import pyspark

daripada pyspark.sql import SparkSession

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

# Baca multi.json (mempunyai berbilang baris) ke dalam PySpark DataFrame

calon_kemahiran = linuxhint_spark_app.read.option( 'berbilang baris' , 'benar' ).json( 'multi.json' )

candidate_skills.show()

Pengeluaran:

Senario 3: Baca Berbilang JSON

Kami telah membincangkan pada fasa permulaan tutorial ini mengenai berbilang fail JSON. Jika anda ingin membaca berbilang fail JSON pada satu masa dan menyimpannya dalam satu PySpark DataFrame, kami perlu menghantar senarai nama fail kepada kaedah read.json().

Mari buat dua fail JSON bernama 'candidate_skills.json' dan 'candidate_skills2.json' dan muatkannya ke dalam PySpark DataFrame.

Fail 'candidate_skills.json' memegang tiga rekod.

Fail 'candidate_skill2.json' hanya memegang satu rekod.

import pyspark

daripada pyspark.sql import SparkSession

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

# Baca fail candidate_skills dan candidate_skills2 pada satu masa ke dalam PySpark DataFrame

candidate_skills = linuxhint_spark_app.read.json([ 'candidate_skills.json' , 'calon_skills2.json' ])

candidate_skills.show()

Pengeluaran:

Akhirnya, DataFrame memegang empat rekod. Tiga rekod pertama adalah milik JSON pertama dan rekod terakhir adalah milik JSON kedua.

Membaca JSON ke PySpark DataFrame Menggunakan Spark.read.json()

Read.json() ialah kaedah yang serupa dengan read_json() dalam Pandas. Di sini, read.json() mengambil laluan ke JSON atau terus ke fail JSON dan memuatkannya terus ke dalam PySpark DataFrame. Tidak perlu menggunakan kaedah createDataFrame() dalam senario ini. Jika anda ingin membaca berbilang fail JSON pada satu masa, kami perlu menghantar senarai nama fail JSON melalui senarai yang dipisahkan dengan koma. Semua rekod JSON disimpan dalam satu DataFrame.

Sintaks:

Fail Tunggal - spark_app.read.json( 'file_name.json' )

Berbilang Fail - spark_app.read.json([ 'file1.json' , 'file2.json' ,...])

Senario 1: Baca JSON Having Single Line

Jika fail JSON anda dalam format record1, record2, record3… (baris tunggal), kami boleh memanggilnya sebagai JSON dengan baris tunggal. Spark memproses rekod ini dan menyimpannya dalam PySpark DataFrame sebagai baris. Setiap rekod ialah satu baris dalam PySpark DataFrame.

Mari buat fail JSON bernama 'candidate_skills.json' yang menyimpan 3 rekod. Baca JSON ini ke dalam PySpark DataFrame.

import pyspark

daripada pyspark.sql import SparkSession

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

# Baca candidate_skills.json ke dalam PySpark DataFrame

candidate_skills = linuxhint_spark_app.read.json( 'candidate_skills.json' )

candidate_skills.show()

Pengeluaran:

Kita dapat melihat bahawa data JSON ditukar kepada PySpark DataFrame dengan rekod dan nama lajur yang ditentukan.

Membaca JSON ke PySpark DataFrame Menggunakan PySpark SQL

Anda boleh membuat paparan sementara data JSON kami menggunakan PySpark SQL. Secara langsung, kami boleh menyediakan JSON pada masa membuat paparan sementara. Lihat sintaks berikut. Selepas itu, kita boleh menggunakan arahan SELECT untuk memaparkan PySpark DataFrame.

Sintaks:

spark_app.sql( 'BUAT PANDANGAN TEMPORARY VIEW_NAME MENGGUNAKAN PILIHAN json (laluan ‘file_name.json')' )

Di sini, 'VIEW_NAME' ialah paparan data JSON dan 'file_name' ialah nama fail JSON.

Contoh 1:

Pertimbangkan fail JSON yang digunakan dalam contoh sebelumnya – “candidate_skills.json”. Pilih semua baris daripada DataFrame menggunakan SELECT dengan operator “*”. Di sini, * memilih semua lajur daripada PySpark DataFrame.

import pyspark

import panda

daripada pyspark.sql import SparkSession

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

# Menggunakan spark.sql untuk mencipta VIEW daripada JSON

calon_kemahiran = linuxhint_spark_app.sql( 'BUAT PANDANGAN SEMENTARA Data_Calon MENGGUNAKAN PILIHAN json (laluan 'candidate_skills.json')' )

# Gunakan pertanyaan SELECT untuk memilih semua rekod daripada data_Calon.

linuxhint_spark_app.sql( 'PILIH * daripada data_Calon' ).tunjukkan()

Pengeluaran:

Jumlah rekod dalam PySpark DataFrame (dibaca daripada JSON) ialah 3.

Contoh 2:

Sekarang, tapis rekod dalam PySpark DataFrame berdasarkan lajur umur. Gunakan operator 'lebih besar daripada' pada umur untuk mendapatkan baris dengan umur yang melebihi 22 tahun.

# Gunakan pertanyaan SELECT untuk memilih rekod dengan umur > 22.

linuxhint_spark_app.sql( 'PILIH * daripada Candidate_data di mana umur>22' ).tunjukkan()

Pengeluaran:

Terdapat hanya satu rekod dalam PySpark DataFrame dengan umur yang melebihi 22 tahun.

Kesimpulan

Kami mempelajari tiga cara berbeza untuk membaca JSON ke dalam PySpark DataFrame. Mula-mula, kami mempelajari cara menggunakan kaedah read_json() yang tersedia dalam modul Pandas untuk membaca JSON ke PySpark DataFrame. Seterusnya, kami belajar cara membaca fail JSON satu/berbilang baris menggunakan kaedah spark.read.json() dengan option(). Untuk membaca berbilang fail JSON pada satu masa, kami perlu menghantar senarai nama fail kepada kaedah ini. Menggunakan PySpark SQL, fail JSON dibaca ke dalam paparan sementara dan DataFrame dipaparkan menggunakan pertanyaan SELECT.