PySpark Lees JSON()

Pyspark Lees Json



Tijdens het werken met PySpark DataFrames moet het worden opgeslagen in het PySpark DataFrame als u de JSON-gegevens wilt verwerken. Na het opslaan in het DataFrame kunnen we de verschillende operaties en methodes toepassen op de data. Er zijn ook zoveel voordelen als we JSON naar PySpark DataFrame converteren, omdat het eenvoudig is en we de gegevens op een eenvoudigere manier kunnen transformeren/partitioneren.

Onderwerp van de inhoud:

JSON inlezen in het PySpark DataFrame met behulp van Pandas.read_json()







JSON lezen naar PySpark DataFrame met behulp van Spark.read.json()



JSON lezen naar PySpark DataFrame met behulp van de PySpark SQL



In deze zelfstudie bekijken we hoe JSON in het PySpark DataFrame kan worden gelezen met behulp van pandas.read_json(), spark.read.json() en spark.sql. In alle scenario's zullen we de verschillende voorbeelden bekijken door rekening te houden met de verschillende JSON-indelingen.





Installeer de PySpark-bibliotheek voordat u de volgende voorbeelden implementeert.

pip installeer pyspark

Na de succesvolle installatie ziet u de uitvoer als volgt:



JSON inlezen in het PySpark DataFrame met behulp van Pandas.read_json()

In PySpark wordt de methode createDataFrame() gebruikt om het DataFrame rechtstreeks te maken. Hier hoeven we alleen het JSON-bestand/pad door te geven aan het JSON-bestand via de pandas.read_json() methode. Deze methode read_json() gebruikt de bestandsnaam/het pad dat beschikbaar is in de Pandas-module. Daarom is het noodzakelijk om de Pandas-module te importeren en te gebruiken.

Syntaxis:

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

Voorbeeld:

Laten we een JSON-bestand maken met de naam 'student_skill.json' dat 2 records bevat. Hier zijn de toetsen/kolommen 'Leerling 1' en 'Leerling 2'. De rijen zijn naam, leeftijd, vaardigheid1 en vaardigheid2.

pyspark importeren

panda's importeren

importeer vanuit pyspark.sql SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# Panda's.read_json() gebruiken

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

candidate_skills.show()

Uitgang:

We kunnen zien dat de JSON-gegevens worden geconverteerd naar PySpark DataFrame met gespecificeerde kolommen en rijen.

2. JSON lezen naar PySpark DataFrame met behulp van Spark.read.json()

De read.json() is een methode die vergelijkbaar is met read_json() in Panda's. Hier neemt read.json() een pad naar JSON of rechtstreeks naar JSON-bestand en laadt het rechtstreeks in het PySpark DataFrame. In dit scenario hoeft u de methode createDataFrame() niet te gebruiken. Als u meerdere JSON-bestanden tegelijk wilt lezen, moeten we een lijst met JSON-bestandsnamen doorgeven via een lijst die wordt gescheiden door komma's. Alle JSON-records worden opgeslagen in één DataFrame.

Syntaxis:

Eén bestand - spark_app.read.json( 'bestandsnaam.json' )

Meerdere bestanden - spark_app.read.json([ 'bestand1.json' , 'bestand2.json' ,...])

Scenario 1: lees JSON met één regel

Als uw JSON-bestand de indelingen record1, record2, record3... (enkele regel) heeft, kunnen we het JSON met enkele regels noemen. Spark verwerkt deze records en slaat deze als rijen op in het PySpark DataFrame. Elke record is een rij in het PySpark DataFrame.

Laten we een JSON-bestand maken met de naam 'candidate_skills.json' dat 3 records bevat. Lees deze JSON in het PySpark DataFrame.

pyspark importeren

importeer vanuit pyspark.sql SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# Lees candidate_skills.json in het PySpark DataFrame

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

candidate_skills.show()

Uitgang:

We kunnen zien dat de JSON-gegevens worden geconverteerd naar PySpark DataFrame met gespecificeerde records en kolomnamen.

Scenario 2: lees JSON met meerdere regels

Als uw JSON-bestand meerdere regels heeft, moet u de methode read.option().json() gebruiken om de multiline-parameter door te geven die moet worden ingesteld op true. Hierdoor kunnen we JSON laden met meerdere regels in het PySpark DataFrame.

lees.optie( 'meerdere regels' , 'WAAR' .json( 'bestandsnaam.json' )

Laten we een JSON-bestand maken met de naam 'multi.json' dat 3 records bevat. Lees deze JSON in het PySpark DataFrame.

pyspark importeren

importeer vanuit pyspark.sql SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# Lees multi.json (met meerdere regels) in het PySpark DataFrame

candidate_skills = linuxhint_spark_app.read.option( 'meerdere regels' , 'WAAR' .json( 'multi.json' )

candidate_skills.show()

Uitgang:

Scenario 3: Meerdere JSON lezen

We hebben in de beginfase van deze tutorial al gesproken over meerdere JSON-bestanden. Als u meerdere JSON-bestanden tegelijk wilt lezen en deze in één PySpark DataFrame wilt opslaan, moeten we een lijst met bestandsnamen doorgeven aan de methode read.json().

Laten we twee JSON-bestanden maken met de naam 'candidate_skills.json' en 'candidate_skills2.json' en deze in het PySpark DataFrame laden.

Het bestand 'candidate_skills.json' bevat drie records.

Het bestand 'candidate_skill2.json' bevat slechts één record.

pyspark importeren

importeer vanuit pyspark.sql SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# Read candidate_skills en candidate_skills2 bestanden tegelijk in het PySpark DataFrame

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

candidate_skills.show()

Uitgang:

Ten slotte bevat het DataFrame vier records. De eerste drie records behoren tot de eerste JSON en de laatste records behoren tot de tweede JSON.

JSON lezen naar PySpark DataFrame met behulp van Spark.read.json()

De read.json() is een methode die vergelijkbaar is met read_json() in Panda's. Hier neemt read.json() een pad naar JSON of rechtstreeks naar JSON-bestand en laadt het rechtstreeks in het PySpark DataFrame. In dit scenario hoeft u de methode createDataFrame() niet te gebruiken. Als u meerdere JSON-bestanden tegelijk wilt lezen, moeten we een lijst met JSON-bestandsnamen doorgeven via een lijst die wordt gescheiden door komma's. Alle JSON-records worden opgeslagen in één DataFrame.

Syntaxis:

Eén bestand - spark_app.read.json( 'bestandsnaam.json' )

Meerdere bestanden - spark_app.read.json([ 'bestand1.json' , 'bestand2.json' ,...])

Scenario 1: lees JSON met één regel

Als uw JSON-bestand de indeling record1, record2, record3... (enkele regel) heeft, kunnen we het JSON met enkele regels noemen. Spark verwerkt deze records en slaat deze als rijen op in het PySpark DataFrame. Elke record is een rij in het PySpark DataFrame.

Laten we een JSON-bestand maken met de naam 'candidate_skills.json' dat 3 records bevat. Lees deze JSON in het PySpark DataFrame.

pyspark importeren

importeer vanuit pyspark.sql SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# Lees candidate_skills.json in het PySpark DataFrame

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

candidate_skills.show()

Uitgang:

We kunnen zien dat de JSON-gegevens worden geconverteerd naar PySpark DataFrame met gespecificeerde records en kolomnamen.

JSON lezen naar PySpark DataFrame met behulp van de PySpark SQL

Het kan mogelijk zijn om een ​​tijdelijke weergave van onze JSON-gegevens te maken met behulp van de PySpark SQL. We kunnen de JSON direct leveren op het moment dat de tijdelijke weergave wordt gemaakt. Kijk naar de volgende syntaxis. Daarna kunnen we de opdracht SELECT gebruiken om het PySpark DataFrame weer te geven.

Syntaxis:

spark_app.sql( 'MAAK TIJDELIJKE WEERGAVE VIEW_NAME MET JSON OPTIONS (pad 'file_name.json')' )

Hier is de 'VIEW_NAME' de weergave van de JSON-gegevens en de 'file_name' is de naam van het JSON-bestand.

Voorbeeld 1:

Overweeg het JSON-bestand dat in de vorige voorbeelden is gebruikt - 'candidate_skills.json'. Selecteer alle rijen uit het DataFrame met behulp van SELECT met de operator '*'. Hier selecteert * alle kolommen uit het PySpark DataFrame.

pyspark importeren

panda's importeren

importeer vanuit pyspark.sql SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux-tip' ).getOrCreate()

# Spark.sql gebruiken om VIEW van de JSON te maken

candidate_skills = linuxhint_spark_app.sql( 'CREËER TIJDELIJKE WEERGAVE Candidate_data MET JSON OPTIONS (pad 'candidate_skills.json')' )

# Gebruik de SELECT-query om alle records uit de Candidate_data te selecteren.

linuxhint_spark_app.sql( 'SELECTEER * uit Candidate_data' ).show()

Uitgang:

Het totale aantal records in het PySpark DataFrame (gelezen uit JSON) is 3.

Voorbeeld 2:

Filter nu de records in het PySpark DataFrame op basis van de leeftijdskolom. Gebruik de operator 'groter dan' voor de leeftijd om de rijen te krijgen met een leeftijd die groter is dan 22.

# Gebruik de SELECT-query om records te selecteren met een leeftijd > 22.

linuxhint_spark_app.sql( 'SELECT * from Candidate_data where age>22' ).show()

Uitgang:

Er is slechts één record in het PySpark DataFrame met een leeftijd die hoger is dan 22.

Conclusie

We hebben de drie verschillende manieren geleerd om de JSON in te lezen in het PySpark DataFrame. Eerst hebben we geleerd hoe we de methode read_json() kunnen gebruiken die beschikbaar is in de Pandas-module om JSON naar PySpark DataFrame te lezen. Vervolgens leerden we hoe we JSON-bestanden met één of meerdere regels moesten lezen met behulp van de methode spark.read.json() met option(). Om meerdere JSON-bestanden tegelijk te lezen, moeten we een lijst met bestandsnamen aan deze methode doorgeven. Met behulp van PySpark SQL wordt het JSON-bestand ingelezen in de tijdelijke weergave en wordt het DataFrame weergegeven met behulp van de SELECT-query.