Bird
Raised Fist0
Apache Sparkdata~5 mins

SQL queries on DataFrames in Apache Spark

Choose your learning style10 modes available
Introduction

SQL queries let you ask questions about your data in a simple way. Using SQL on DataFrames helps you find, filter, and summarize data easily.

You want to quickly filter rows based on conditions.
You need to group data and calculate totals or averages.
You prefer writing SQL instead of complex code to analyze data.
You want to join two sets of data to combine information.
You want to sort data to find top or bottom values.
Syntax
Apache Spark
df.createOrReplaceTempView("table_name")
spark.sql("SELECT column1, column2 FROM table_name WHERE condition")

First, register your DataFrame as a temporary table with createOrReplaceTempView.

Then, use spark.sql() to run SQL queries on that table.

Examples
Selects names and ages of people older than 30.
Apache Spark
df.createOrReplaceTempView("people")
spark.sql("SELECT name, age FROM people WHERE age > 30")
Calculates total sales amount for each product.
Apache Spark
df.createOrReplaceTempView("sales")
spark.sql("SELECT product, SUM(amount) AS total_amount FROM sales GROUP BY product")
Finds top 5 highest paid employees.
Apache Spark
df.createOrReplaceTempView("employees")
spark.sql("SELECT * FROM employees ORDER BY salary DESC LIMIT 5")
Sample Program

This program creates a DataFrame with people data, registers it as a SQL table, and runs a query to find people older than 30. It then shows the filtered results sorted by age.

Apache Spark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("SQLQueriesOnDataFrames").getOrCreate()

# Create sample data
data = [
    (1, "Alice", 29),
    (2, "Bob", 35),
    (3, "Cathy", 23),
    (4, "David", 40),
    (5, "Eva", 30)
]

columns = ["id", "name", "age"]

df = spark.createDataFrame(data, columns)

# Register DataFrame as a temporary view

df.createOrReplaceTempView("people")

# Run SQL query to select people older than 30
result = spark.sql("SELECT name, age FROM people WHERE age > 30 ORDER BY age")

# Show the result
result.show()
OutputSuccess
Important Notes

Temporary views last only during the Spark session.

You can use all standard SQL commands like SELECT, WHERE, GROUP BY, ORDER BY, and JOIN.

Remember to import and create a SparkSession before running SQL queries.

Summary

Use createOrReplaceTempView to turn a DataFrame into a SQL table.

Run SQL queries on DataFrames with spark.sql().

This method makes data analysis easier for those familiar with SQL.

Practice

(1/5)
1. What does the createOrReplaceTempView method do in Apache Spark?
easy
A. It registers a DataFrame as a temporary SQL table for querying.
B. It permanently saves the DataFrame to disk as a table.
C. It converts a SQL query into a DataFrame.
D. It deletes a temporary view from Spark.

Solution

  1. Step 1: Understand the purpose of createOrReplaceTempView

    This method registers a DataFrame as a temporary table in Spark's SQL context.
  2. Step 2: Recognize its use in SQL queries

    Once registered, you can run SQL queries on the DataFrame using spark.sql().
  3. Final Answer:

    It registers a DataFrame as a temporary SQL table for querying. -> Option A
  4. Quick Check:

    Temporary view = SQL table for queries [OK]
Hint: Temp view means temporary SQL table for queries [OK]
Common Mistakes:
  • Thinking it saves data permanently
  • Confusing it with running SQL queries
  • Assuming it deletes tables
2. Which of the following is the correct syntax to run a SQL query on a DataFrame registered as a temp view named people?
easy
A. spark.execute("SELECT * FROM people")
B. spark.query("SELECT * FROM people")
C. spark.sql("SELECT * FROM people")
D. spark.runSQL("SELECT * FROM people")

Solution

  1. Step 1: Identify the correct method to run SQL queries

    The method to run SQL queries on Spark is spark.sql().
  2. Step 2: Check the syntax for querying the temp view

    The query string should be passed inside spark.sql() as shown in spark.sql("SELECT * FROM people").
  3. Final Answer:

    spark.sql("SELECT * FROM people") -> Option C
  4. Quick Check:

    Use spark.sql() to run SQL queries [OK]
Hint: Use spark.sql() to run SQL queries on temp views [OK]
Common Mistakes:
  • Using incorrect method names like spark.query
  • Forgetting to use quotes around SQL query
  • Confusing method names with other APIs
3. Given the following code, what will be the output of the SQL query?
data = [(1, "Alice", 29), (2, "Bob", 31), (3, "Cathy", 25)]
columns = ["id", "name", "age"]
df = spark.createDataFrame(data, columns)
df.createOrReplaceTempView("people")
result = spark.sql("SELECT name FROM people WHERE age > 28 ORDER BY age DESC")
result.show()
medium
A. [["Bob"], ["Cathy"]]
B. [["Alice"], ["Bob"]]
C. [["Cathy"]]
D. [["Bob"], ["Alice"]]

Solution

  1. Step 1: Analyze the data and filter condition

    Rows with age > 28 are Alice (29) and Bob (31).
  2. Step 2: Apply ORDER BY age DESC

    Ordering by age descending gives Bob (31) first, then Alice (29).
  3. Final Answer:

    [["Bob"], ["Alice"]] -> Option D
  4. Quick Check:

    Filter age > 28 and order desc = Bob, Alice [OK]
Hint: Filter then order by age descending to get correct order [OK]
Common Mistakes:
  • Mixing ascending and descending order
  • Including rows with age <= 28
  • Confusing column names in SELECT
4. Identify the error in the following code snippet:
df.createOrReplaceTempView("employees")
result = spark.sql("SELECT * FROM employee WHERE salary > 50000")
result.show()
medium
A. The DataFrame was not created before creating temp view.
B. The temp view name is 'employees' but query uses 'employee'.
C. The SQL query syntax is incorrect.
D. The show() method cannot be used on SQL query results.

Solution

  1. Step 1: Check temp view name and SQL query table name

    The temp view is named "employees" but the query uses "employee" (missing 's').
  2. Step 2: Understand impact of name mismatch

    This causes a runtime error because the table "employee" does not exist.
  3. Final Answer:

    The temp view name is 'employees' but query uses 'employee'. -> Option B
  4. Quick Check:

    Temp view and query table names must match exactly [OK]
Hint: Check temp view and query table names match exactly [OK]
Common Mistakes:
  • Assuming SQL syntax error instead of name mismatch
  • Thinking show() can't be used on results
  • Ignoring case sensitivity in table names
5. You have a DataFrame sales with columns product, region, and amount. You want to find the total sales amount per region but only for regions where total sales exceed 1000. Which SQL query on the temp view sales will achieve this?
hard
A. SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region HAVING total_sales > 1000
B. SELECT region, SUM(amount) AS total_sales FROM sales WHERE total_sales > 1000 GROUP BY region
C. SELECT region, SUM(amount) FROM sales GROUP BY region WHERE SUM(amount) > 1000
D. SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region WHERE total_sales > 1000

Solution

  1. Step 1: Understand filtering on aggregated data

    Filtering on aggregated results requires the HAVING clause, not WHERE.
  2. Step 2: Check correct use of HAVING with alias

    Using HAVING total_sales > 1000 after GROUP BY is correct as in SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region HAVING total_sales > 1000.
  3. Final Answer:

    SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region HAVING total_sales > 1000 -> Option A
  4. Quick Check:

    Use HAVING to filter grouped aggregates [OK]
Hint: Use HAVING, not WHERE, to filter grouped results [OK]
Common Mistakes:
  • Using WHERE instead of HAVING for aggregates
  • Placing WHERE after GROUP BY
  • Not aliasing SUM(amount) before HAVING
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard