Tema vsebine:
Branje JSON v PySpark DataFrame z uporabo Pandas.read_json()
Branje JSON v PySpark DataFrame z uporabo Spark.read.json()
Branje JSON v PySpark DataFrame z uporabo PySpark SQL
V tej vadnici si bomo ogledali, kako prebrati JSON v PySpark DataFrame z uporabo pandas.read_json(), spark.read.json() in spark.sql. V vseh scenarijih si bomo ogledali različne primere z upoštevanjem različnih formatov JSON.
Pred implementacijo naslednjih primerov namestite knjižnico PySpark.
pip namestite pysparkPo uspešni namestitvi si lahko ogledate izhod, kot sledi:
Branje JSON v PySpark DataFrame z uporabo Pandas.read_json()
V PySparku se metoda createDataFrame() uporablja za neposredno ustvarjanje DataFrame. Tukaj moramo samo posredovati datoteko JSON/pot do datoteke JSON prek metode pandas.read_json(). Ta metoda read_json() prevzame ime datoteke/pot, ki je na voljo v modulu Pandas. Zato je potrebno uvoziti in uporabiti modul Pandas.
Sintaksa:
spark_app.createDataFrame(pandas.read_json( 'ime_datoteke.json' ))primer:
Ustvarimo datoteko JSON z imenom 'student_skill.json', ki vsebuje 2 zapisa. Tukaj sta ključa/stolpca »Študent 1« in »Študent 2«. Vrstice so ime, starost, spretnost1 in spretnost2.
uvozi pyspark
uvoz pand
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# Uporaba pandas.read_json()
kandidat_skills = linuxhint_spark_app.createDataFrame(pandas.read_json( 'student_skill.json' ))
kandidat_skills.show()
Izhod:
Vidimo lahko, da so podatki JSON pretvorjeni v PySpark DataFrame z določenimi stolpci in vrsticami.
2. Branje JSON v PySpark DataFrame z uporabo Spark.read.json()
Read.json() je metoda, ki je podobna read_json() v Pandas. Tukaj read.json() prevzame pot do JSON ali neposredno do datoteke JSON in jo neposredno naloži v PySpark DataFrame. V tem scenariju ni treba uporabiti metode createDataFrame(). Če želite brati več datotek JSON hkrati, moramo posredovati seznam imen datotek JSON skozi seznam, ki je ločen z vejico. Vsi zapisi JSON so shranjeni v enem DataFrame.
Sintaksa:
Ena datoteka - spark_app.read.json( 'ime_datoteke.json' )Več datotek - spark_app.read.json([ 'file1.json' , 'file2.json' ,...])
1. scenarij: branje JSON z eno vrstico
Če je vaša datoteka JSON v oblikah zapis1, zapis2, zapis3… (ena vrstica), jo lahko imenujemo kot JSON z eno vrstico. Spark obdela te zapise in jih shrani v PySpark DataFrame kot vrstice. Vsak zapis je vrstica v PySpark DataFrame.
Ustvarimo datoteko JSON z imenom 'candidate_skills.json', ki vsebuje 3 zapise. Preberite ta JSON v PySpark DataFrame.
uvozi pyspark
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# Preberite kandidat_skills.json v PySpark DataFrame
kandidat_skills = linuxhint_spark_app.read.json( 'candidate_skills.json' )
kandidat_skills.show()
Izhod:
Vidimo lahko, da so podatki JSON pretvorjeni v PySpark DataFrame z določenimi zapisi in imeni stolpcev.
2. scenarij: preberite JSON z več vrsticami
Če ima vaša datoteka JSON več vrstic, morate uporabiti metodo read.option().json(), da posredujete večvrstični parameter, ki mora biti nastavljen na true. To nam omogoča nalaganje JSON z več vrsticami v PySpark DataFrame.
read.option( 'večvrstični' , 'prav' ).json( 'ime_datoteke.json' )Ustvarimo datoteko JSON z imenom »multi.json«, ki vsebuje 3 zapise. Preberite ta JSON v PySpark DataFrame.
uvozi pyspark
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# Preberite multi.json (ki ima več vrstic) v PySpark DataFrame
kandidat_skills = linuxhint_spark_app.read.option( 'večvrstični' , 'prav' ).json( 'multi.json' )
kandidat_skills.show()
Izhod:
3. scenarij: branje več datotek JSON
V začetni fazi te vadnice smo že razpravljali o več datotekah JSON. Če želite prebrati več datotek JSON hkrati in jih shraniti v en PySpark DataFrame, moramo posredovati seznam imen datotek metodi read.json().
Ustvarimo dve datoteki JSON z imenom 'candidate_skills.json' in 'candidate_skills2.json' in ju naložimo v PySpark DataFrame.
Datoteka »candidate_skills.json« vsebuje tri zapise.
Datoteka »candidate_skill2.json« vsebuje samo en zapis.
uvozi pyspark
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# Branje datotek kandidat_skills in kandidat_skills2 naenkrat v PySpark DataFrame
kandidat_skills = linuxhint_spark_app.read.json([ 'candidate_skills.json' , 'candidate_skills2.json' ])
kandidat_skills.show()
Izhod:
Nazadnje DataFrame vsebuje štiri zapise. Prvi trije zapisi pripadajo prvemu JSON, zadnji zapisi pa drugemu JSON.
Branje JSON v PySpark DataFrame z uporabo Spark.read.json()
Read.json() je metoda, ki je podobna read_json() v Pandas. Tukaj read.json() prevzame pot do JSON ali neposredno do datoteke JSON in jo naloži neposredno v PySpark DataFrame. V tem scenariju ni treba uporabiti metode createDataFrame(). Če želite brati več datotek JSON hkrati, moramo posredovati seznam imen datotek JSON skozi seznam, ki je ločen z vejico. Vsi zapisi JSON so shranjeni v enem DataFrame.
Sintaksa:
Ena datoteka - spark_app.read.json( 'ime_datoteke.json' )Več datotek - spark_app.read.json([ 'file1.json' , 'file2.json' ,...])
1. scenarij: branje JSON z eno vrstico
Če je vaša datoteka JSON v zapisu1, zapis2, zapis3… (ena vrstica), jo lahko imenujemo kot JSON z eno vrstico. Spark obdela te zapise in jih shrani v PySpark DataFrame kot vrstice. Vsak zapis je vrstica v PySpark DataFrame.
Ustvarimo datoteko JSON z imenom 'candidate_skills.json', ki vsebuje 3 zapise. Preberite ta JSON v PySpark DataFrame.
uvozi pyspark
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# Preberite kandidat_skills.json v PySpark DataFrame
kandidat_skills = linuxhint_spark_app.read.json( 'candidate_skills.json' )
kandidat_skills.show()
Izhod:
Vidimo lahko, da so podatki JSON pretvorjeni v PySpark DataFrame z določenimi zapisi in imeni stolpcev.
Branje JSON v PySpark DataFrame z uporabo PySpark SQL
Z uporabo PySpark SQL je mogoče ustvariti začasni pogled naših podatkov JSON. Neposredno lahko zagotovimo JSON v času ustvarjanja začasnega pogleda. Poglejte naslednjo sintakso. Po tem lahko uporabimo ukaz SELECT za prikaz PySpark DataFrame.
Sintaksa:
spark_app.sql( 'USTVARI ZAČASNI POGLED VIEW_NAME Z UPORABO json OPTIONS (pot 'ime_datoteke.json')' )Tu je »VIEW_NAME« pogled podatkov JSON, »file_name« pa je ime datoteke JSON.
Primer 1:
Razmislite o datoteki JSON, ki je bila uporabljena v prejšnjih primerih – »candidate_skills.json«. Izberite vse vrstice iz DataFrame z uporabo SELECT z operatorjem “*”. Tukaj * izbere vse stolpce iz PySpark DataFrame.
uvozi pysparkuvoz pand
iz pyspark.sql uvozi SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Namig za Linux' ).getOrCreate()
# Uporaba spark.sql za ustvarjanje VIEW iz JSON
kandidat_skills = linuxhint_spark_app.sql( 'USTVARITE ZAČASNI POGLED Candidate_data Z UPORABO json OPTIONS (pot 'candidate_skills.json')' )
# Uporabite poizvedbo SELECT, da izberete vse zapise iz Candidate_data.
linuxhint_spark_app.sql( 'IZBERI * iz podatkov_kandidata' ).show()
Izhod:
Skupno število zapisov v PySpark DataFrame (prebranih iz JSON) je 3.
Primer 2:
Zdaj filtrirajte zapise v PySpark DataFrame na podlagi stolpca starosti. Uporabite operator »več kot« za starost, da dobite vrstice s starostjo, ki je višja od 22 let.
# Uporabite poizvedbo SELECT, da izberete zapise s starostjo > 22.linuxhint_spark_app.sql( 'SELECT * from Candidate_data where age>22' ).show()
Izhod:
V PySpark DataFrame je samo en zapis s starostjo nad 22 let.
Zaključek
Naučili smo se treh različnih načinov branja JSON v PySpark DataFrame. Najprej smo se naučili, kako uporabiti metodo read_json(), ki je na voljo v modulu Pandas za branje JSON v PySpark DataFrame. Nato smo se naučili brati eno-/večvrstične datoteke JSON z uporabo metode spark.read.json() z option(). Če želite prebrati več datotek JSON hkrati, moramo tej metodi posredovati seznam imen datotek. Z uporabo PySpark SQL se datoteka JSON prebere v začasni pogled in DataFrame se prikaže s poizvedbo SELECT.