Ämne för innehåll:
Läser JSON i PySpark DataFrame med Pandas.read_json()
Läser JSON till PySpark DataFrame med Spark.read.json()
Läser JSON till PySpark DataFrame med PySpark SQL
I den här handledningen kommer vi att titta på hur man läser in JSON i PySpark DataFrame med hjälp av pandas.read_json(), spark.read.json() och spark.sql. I alla scenarier kommer vi att titta på de olika exemplen genom att överväga de olika JSON-formaten.
Installera PySpark-biblioteket innan du implementerar följande exempel.
pip installera pysparkEfter den lyckade installationen kan du se resultatet enligt följande:
Läser JSON i PySpark DataFrame med Pandas.read_json()
I PySpark används metoden createDataFrame() för att skapa DataFrame direkt. Här behöver vi bara skicka JSON-filen/sökvägen till JSON-filen genom metoden pandas.read_json(). Denna read_json()-metod tar filnamnet/sökvägen som är tillgänglig i Pandas-modulen. Det är därför det är nödvändigt att importera och använda Pandas-modulen.
Syntax:
spark_app.createDataFrame(pandas.read_json( 'filnamn.json' ))Exempel:
Låt oss skapa en JSON-fil med namnet 'student_skill.json' som innehåller 2 poster. Här är nycklarna/kolumnerna 'Student 1' och 'Student 2'. Raderna är namn, ålder, färdighet1 och färdighet2.
importera pyspark
importera pandor
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux tips' ).getOrCreate()
# Använda pandas.read_json()
candidate_skills = linuxhint_spark_app.createDataFrame(pandas.read_json( 'student_skill.json' ))
candidate_skills.show()
Produktion:
Vi kan se att JSON-data konverteras till PySpark DataFrame med specificerade kolumner och rader.
2. Läsa JSON till PySpark DataFrame med Spark.read.json()
Read.json() är en metod som liknar read_json() i Pandas. Här tar read.json() en sökväg till JSON eller direkt till JSON-filen och laddar den direkt i PySpark DataFrame. Det finns inget behov av att använda metoden createDataFrame() i det här scenariot. Om du vill läsa flera JSON-filer åt gången, måste vi skicka en lista med JSON-filnamn genom en lista som är avgränsad med kommatecken. Alla JSON-poster lagras i en enda DataFrame.
Syntax:
Enkel fil - spark_app.read.json( 'filnamn.json' )Flera filer - spark_app.read.json([ 'fil1.json' , 'fil2.json' ,...])
Scenario 1: Läs JSON med en enda linje
Om din JSON-fil är i formaten record1, record2, record3... (enkel rad) kan vi kalla den som JSON med enstaka rader. Spark bearbetar dessa poster och lagrar dem i PySpark DataFrame som rader. Varje post är en rad i PySpark DataFrame.
Låt oss skapa en JSON-fil med namnet 'candidate_skills.json' som innehåller 3 poster. Läs denna JSON i PySpark DataFrame.
importera pyspark
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux tips' ).getOrCreate()
# Läs in candidate_skills.json i PySpark DataFrame
candidate_skills = linuxhint_spark_app.read.json( 'candidate_skills.json' )
candidate_skills.show()
Produktion:
Vi kan se att JSON-data konverteras till PySpark DataFrame med specificerade poster och kolumnnamn.
Scenario 2: Läs JSON som har flera linjer
Om din JSON-fil har flera rader måste du använda metoden read.option().json() för att skicka flerradsparametern som måste ställas in på true. Detta gör att vi kan ladda JSON med flera rader i PySpark DataFrame.
read.option( 'flerlinje' , 'Sann' ).json( 'filnamn.json' )Låt oss skapa en JSON-fil med namnet 'multi.json' som innehåller 3 poster. Läs denna JSON i PySpark DataFrame.
importera pyspark
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux tips' ).getOrCreate()
# Läs multi.json (med flera rader) i PySpark DataFrame
candidate_skills = linuxhint_spark_app.read.option( 'flerlinje' , 'Sann' ).json( 'multi.json' )
candidate_skills.show()
Produktion:
Scenario 3: Läs flera JSON
Vi diskuterade redan i startfasen av denna handledning om flera JSON-filer. Om du vill läsa flera JSON-filer åt gången och lagra dem i en enda PySpark DataFrame, måste vi skicka en lista med filnamn till metoden read.json().
Låt oss skapa två JSON-filer med namnet 'candidate_skills.json' och 'candidate_skills2.json' och ladda dem i PySpark DataFrame.
Filen 'candidate_skills.json' innehåller tre poster.
Filen 'candidate_skill2.json' innehåller bara en enda post.
importera pyspark
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tips' ).getOrCreate()
# Läs candidate_skills och candidate_skills2 filer åt gången i PySpark DataFrame
candidate_skills = linuxhint_spark_app.read.json([ 'candidate_skills.json' , 'candidate_skills2.json' ])
candidate_skills.show()
Produktion:
Slutligen har DataFrame fyra poster. De tre första posterna tillhör den första JSON och de sista posterna tillhör den andra JSON.
Läser JSON till PySpark DataFrame med Spark.read.json()
Read.json() är en metod som liknar read_json() i Pandas. Här tar read.json() en sökväg till JSON eller direkt till JSON-filen och laddar den direkt i PySpark DataFrame. Det finns inget behov av att använda metoden createDataFrame() i det här scenariot. Om du vill läsa flera JSON-filer åt gången, måste vi skicka en lista med JSON-filnamn genom en lista som är avgränsad med kommatecken. Alla JSON-poster lagras i en enda DataFrame.
Syntax:
Enkel fil - spark_app.read.json( 'filnamn.json' )Flera filer - spark_app.read.json([ 'fil1.json' , 'fil2.json' ,...])
Scenario 1: Läs JSON med en enda linje
Om din JSON-fil är i formatet record1, record2, record3... (enkel rad) kan vi kalla den som JSON med enstaka rader. Spark bearbetar dessa poster och lagrar dem i PySpark DataFrame som rader. Varje post är en rad i PySpark DataFrame.
Låt oss skapa en JSON-fil med namnet 'candidate_skills.json' som innehåller 3 poster. Läs denna JSON i PySpark DataFrame.
importera pyspark
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tips' ).getOrCreate()
# Läs in candidate_skills.json i PySpark DataFrame
candidate_skills = linuxhint_spark_app.read.json( 'candidate_skills.json' )
candidate_skills.show()
Produktion:
Vi kan se att JSON-data konverteras till PySpark DataFrame med specificerade poster och kolumnnamn.
Läser JSON till PySpark DataFrame med PySpark SQL
Det kan vara möjligt att skapa en tillfällig vy av våra JSON-data med PySpark SQL. Direkt kan vi tillhandahålla JSON vid tidpunkten för att skapa den tillfälliga vyn. Titta på följande syntax. Efter det kan vi använda kommandot SELECT för att visa PySpark DataFrame.
Syntax:
spark_app.sql( 'SKAPA TILLÄMPLIG VY VIEW_NAME MED JSON-ALTERNATIV (sökväg 'file_name.json')' )Här är 'VIEW_NAME' vyn av JSON-data och 'file_name' är namnet på JSON-filen.
Exempel 1:
Tänk på JSON-filen som används i de tidigare exemplen – “candidate_skills.json”. Välj alla rader från DataFrame med SELECT med operatorn '*'. Här väljer * alla kolumner från PySpark DataFrame.
importera pysparkimportera pandor
från pyspark.sql importera SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tips' ).getOrCreate()
# Använder spark.sql för att skapa VIEW från JSON
candidate_skills = linuxhint_spark_app.sql( 'SKAPA TILLFÄLLIG VY Candidate_data MED JSON OPTIONS (sökväg 'candidate_skills.json')' )
# Använd SELECT-frågan för att välja alla poster från Candidate_data.
linuxhint_spark_app.sql( 'SELECT * from Candidate_data' ).show()
Produktion:
Det totala antalet poster i PySpark DataFrame (läst från JSON) är 3.
Exempel 2:
Filtrera nu posterna i PySpark DataFrame baserat på ålderskolumnen. Använd operatorn 'större än' på åldern för att få rader med en ålder som är större än 22.
# Använd SELECT-frågan för att välja poster med ålder > 22.linuxhint_spark_app.sql( 'SELECT * från Candidate_data där ålder>22' ).show()
Produktion:
Det finns bara en post i PySpark DataFrame med en ålder som är högre än 22.
Slutsats
Vi lärde oss de tre olika sätten att läsa in JSON i PySpark DataFrame. Först lärde vi oss hur man använder metoden read_json() som är tillgänglig i Pandas-modulen för att läsa JSON till PySpark DataFrame. Därefter lärde vi oss hur man läser enkel-/flerrads JSON-filer med metoden spark.read.json() med option(). För att läsa flera JSON-filer åt gången måste vi skicka en lista med filnamn till den här metoden. Med PySpark SQL läses JSON-filen in i den temporära vyn och DataFrame visas med hjälp av SELECT-frågan.