PySpark – PySpark SQL

Table Of Contents:

  1. What is PySpark SQL?
  2. Why Use PySpark SQL?
  3. Setting It Up (Step-by-Step)
  4. SQL vs DataFrame APIs (Both Supported!)
  5. Advanced Features in PySpark SQL
  6. Input Data Formats
  7. Performance Optimizations
  8. Real-World Use Cases
  9. Summary

(1) What is PySpark SQL?

(2) Why Use PySpark SQL?

(3) Setting It Up (Step-by-Step)

Step 1: Create a SparkSession
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("PySparkSQLDemo") \
    .getOrCreate()
Step 2: Load Data into a DataFrame
df = spark.read.csv("employees.csv", header=True, inferSchema=True)
df.show()
Step 3: Register DataFrame as SQL Table (Temp View)
df.createOrReplaceTempView("employees")
Step 4: Run SQL Queries!
result = spark.sql("""
    SELECT department, AVG(salary) as avg_salary 
    FROM employees 
    GROUP BY department
""")
result.show()

(4) SQL vs DataFrame APIs (Both Supported!)

# SQL
spark.sql("SELECT * FROM employees WHERE age > 30").show()

# DataFrame API
df.filter(df.age > 30).show()
  • You can mix and match both styles in your application.

(5) Advanced Features in PySpark SQL

Create SparkSession
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("App").getOrCreate()
Load Data
df = spark.read.csv("data.csv", header=True, inferSchema=True)
df = spark.read.json("data.json")
df = spark.read.parquet("data.parquet")
Basic DataFrame Operations
df.show()               # Display top 20 rows
df.printSchema()        # Print schema
df.columns              # List of column names
df.describe().show()    # Summary statistics
Filtering and Selection:
df.select("name", "age").show()
df.filter(df.age > 30).show()
df.where(df.salary > 50000).show()
Aggregations:
from pyspark.sql.functions import avg, max, min, count

df.groupBy("department").agg(avg("salary")).show()
df.groupBy("department").count().show()
With SQL
df.createOrReplaceTempView("employees")

spark.sql("SELECT * FROM employees WHERE age > 30").show()
spark.sql("""
    SELECT department, AVG(salary) 
    FROM employees 
    GROUP BY department
""").show()
Join DataFrames
df1.join(df2, df1.id == df2.id, "inner").show()
Sorting & Limiting
df.orderBy("age").show()
df.sort(df.age.desc()).show()
df.limit(5).show()
Handling Missing Values
df.dropna().show()                         # Drop rows with nulls
df.fillna({"salary": 0, "name": "Unknown"}).show()  # Fill nulls
Adding / Renaming Columns
df.withColumn("new_salary", df.salary * 1.1).show()
df.withColumnRenamed("old_name", "new_name")
Save Data
df.write.csv("output.csv", header=True)
df.write.json("output.json")
df.write.parquet("output.parquet")

(6) Input Data Formats

df = spark.read.parquet("data/employees.parquet")
df.createOrReplaceTempView("parquet_table")
spark.sql("SELECT * FROM parquet_table").show()

(7) Performance Optimizations

(8) Real-World Use Cases

(9) Summary

Leave a Reply

Your email address will not be published. Required fields are marked *