PySpark Läs JSON()

Pyspark Las Json



När du arbetar med PySpark DataFrames måste den lagras i PySpark DataFrame om du vill bearbeta JSON-data. Efter lagring i DataFrame kan vi tillämpa de olika operationerna och metoderna på datan. Dessutom finns det så många fördelar om vi konverterar JSON till PySpark DataFrame eftersom det är enkelt och vi kan transformera/partitionera data på ett enklare sätt.

Ä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 pyspark

Efter 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 pyspark

importera 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.