Bird
Raised Fist0
Apache Sparkdata~5 mins

GroupBy and aggregations in Apache Spark - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: GroupBy and aggregations
O(n)
Understanding Time Complexity

When we group data and calculate summaries, the time it takes depends on how much data we have.

We want to know how the work grows as the data gets bigger.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

from pyspark.sql import SparkSession
from pyspark.sql.functions import avg

spark = SparkSession.builder.getOrCreate()
df = spark.read.csv('data.csv', header=True, inferSchema=True)

result = df.groupBy('category').agg(avg('value').alias('average_value'))
result.show()

This code groups rows by the 'category' column and calculates the average of 'value' for each group.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Scanning all rows to assign them to groups and then computing averages per group.
  • How many times: Each row is processed once during grouping; then each group is processed once for aggregation.
How Execution Grows With Input

As the number of rows grows, the time to group and aggregate grows roughly in direct proportion.

Input Size (n)Approx. Operations
10About 10 operations to assign groups + a few for averages
100About 100 operations to assign groups + a few for averages
1000About 1000 operations to assign groups + a few for averages

Pattern observation: The work grows roughly linearly with the number of rows.

Final Time Complexity

Time Complexity: O(n)

This means the time to group and aggregate grows in a straight line as the data size grows.

Common Mistake

[X] Wrong: "Grouping always takes constant time no matter how big the data is."

[OK] Correct: Grouping must look at each row to decide its group, so more data means more work.

Interview Connect

Understanding how grouping and aggregation scale helps you explain data processing steps clearly and confidently.

Self-Check

"What if we added a second grouping column? How would the time complexity change?"

Practice

(1/5)
1. What does the groupBy function do in Apache Spark?
easy
A. It splits the data into groups based on column values.
B. It sorts the data in ascending order.
C. It filters rows based on a condition.
D. It joins two DataFrames together.

Solution

  1. Step 1: Understand the purpose of groupBy

    The groupBy function is used to split data into groups based on one or more column values.
  2. Step 2: Compare with other functions

    Sorting, filtering, and joining are different operations and do not split data into groups.
  3. Final Answer:

    It splits the data into groups based on column values. -> Option A
  4. Quick Check:

    groupBy = splits data into groups [OK]
Hint: Remember: groupBy groups rows by column values [OK]
Common Mistakes:
  • Confusing groupBy with filter or sort
  • Thinking groupBy changes row order
  • Assuming groupBy merges DataFrames
2. Which of the following is the correct syntax to calculate the average of column sales after grouping by region in Spark DataFrame df?
easy
A. df.groupBy("region").sum("sales")
B. df.groupBy("region").agg(avg("sales"))
C. df.groupBy("region").filter(avg("sales"))
D. df.groupBy("region").select(avg("sales"))

Solution

  1. Step 1: Identify correct aggregation syntax

    To calculate average after grouping, use groupBy followed by agg(avg(column)).
  2. Step 2: Check each option

    df.groupBy("region").agg(avg("sales")) uses agg(avg("sales")) correctly. df.groupBy("region").sum("sales") uses sum, not average. df.groupBy("region").filter(avg("sales")) uses filter incorrectly. df.groupBy("region").select(avg("sales")) uses select which is not valid after groupBy for aggregation.
  3. Final Answer:

    df.groupBy("region").agg(avg("sales")) -> Option B
  4. Quick Check:

    groupBy + agg(avg) = df.groupBy("region").agg(avg("sales")) [OK]
Hint: Use agg() with avg() inside groupBy for averages [OK]
Common Mistakes:
  • Using sum instead of avg for average
  • Using filter instead of agg
  • Using select after groupBy without agg
3. Given the following Spark code, what will be the output schema and result?
from pyspark.sql import SparkSession
from pyspark.sql.functions import sum

spark = SparkSession.builder.getOrCreate()
data = [("East", 100), ("West", 200), ("East", 150)]
df = spark.createDataFrame(data, ["region", "sales"])
result = df.groupBy("region").agg(sum("sales").alias("total_sales"))
result.show()
medium
A. region | total_sales East | 250 West | 200
B. region | sales East | 100 West | 200 East | 150
C. region | total_sales East | 150 West | 200
D. region | total_sales East | 100 West | 200

Solution

  1. Step 1: Understand groupBy and sum aggregation

    The code groups rows by "region" and sums the "sales" values for each group.
  2. Step 2: Calculate sums for each region

    For "East": 100 + 150 = 250; For "West": 200.
  3. Final Answer:

    region | total_sales East | 250 West | 200 -> Option A
  4. Quick Check:

    Sum sales by region = 250 (East), 200 (West) [OK]
Hint: Sum sales per group to get total_sales [OK]
Common Mistakes:
  • Not summing all values per group
  • Confusing alias name with original column
  • Expecting original rows without aggregation
4. Identify the error in the following Spark code snippet:
df.groupBy("category").agg(sum("amount"), avg("amount"))
medium
A. Missing alias for aggregated columns causes error.
B. agg() requires a dictionary, not multiple arguments.
C. groupBy cannot be used with agg.
D. sum and avg functions are not imported.

Solution

  1. Step 1: Check function imports

    The code uses sum and avg functions but does not show imports from pyspark.sql.functions.
  2. Step 2: Validate other options

    agg() accepts multiple arguments; aliasing is optional; groupBy works with agg.
  3. Final Answer:

    sum and avg functions are not imported. -> Option D
  4. Quick Check:

    Missing imports cause NameError [OK]
Hint: Always import aggregation functions before use [OK]
Common Mistakes:
  • Assuming agg needs dict, but it accepts multiple args
  • Forgetting to import sum, avg from pyspark.sql.functions
  • Thinking groupBy can't be chained with agg
5. You have a Spark DataFrame sales_df with columns store, product, and revenue. You want to find the maximum revenue per store and the average revenue per product across all stores in a single query. Which code snippet correctly achieves this?
hard
A. sales_df.groupBy("store").agg(max("revenue").alias("max_revenue"), avg("revenue").alias("avg_revenue"))
B. sales_df.agg(max("revenue").alias("max_revenue"), avg("revenue").alias("avg_revenue"))
C. sales_df.groupBy("store").agg(max("revenue").alias("max_revenue")).crossJoin(sales_df.groupBy("product").agg(avg("revenue").alias("avg_revenue")))
D. sales_df.groupBy("store").agg(max("revenue").alias("max_revenue")).groupBy("product").agg(avg("revenue").alias("avg_revenue"))

Solution

  1. Step 1: Understand the requirements

    We need max revenue per store and average revenue per product in one result.
  2. Step 2: Analyze options

    sales_df.groupBy("store").agg(max("revenue").alias("max_revenue"), avg("revenue").alias("avg_revenue")) aggregates both by store only, so avg revenue per product is incorrect. sales_df.agg(max("revenue").alias("max_revenue"), avg("revenue").alias("avg_revenue")) aggregates globally, losing grouping. sales_df.groupBy("store").agg(max("revenue").alias("max_revenue")).groupBy("product").agg(avg("revenue").alias("avg_revenue")) tries chaining groupBy but overwrites previous aggregation. sales_df.groupBy("store").agg(max("revenue").alias("max_revenue")).crossJoin(sales_df.groupBy("product").agg(avg("revenue").alias("avg_revenue"))) computes both groupings separately and joins results, correctly combining both summaries.
  3. Final Answer:

    sales_df.groupBy("store").agg(max("revenue").alias("max_revenue")).crossJoin(sales_df.groupBy("product").agg(avg("revenue").alias("avg_revenue"))) -> Option C
  4. Quick Check:

    Separate groupBy + crossJoin combines both aggregations [OK]
Hint: Use separate groupBy then join to combine different aggregations [OK]
Common Mistakes:
  • Trying to aggregate different groupings in one groupBy
  • Overwriting aggregation by chaining groupBy
  • Forgetting to join separate aggregation results
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