📖 Scenario: You work in a small bakery that keeps track of daily sales data in a Spark DataFrame. You want to add new information and rename columns to make the data easier to understand.
🎯 Goal: Learn how to add a new column to a Spark DataFrame and rename an existing column.
📋 What You'll Learn
Create a Spark DataFrame with specific sales data
Add a new column with calculated values
Rename an existing column
Display the final DataFrame
💡 Why This Matters
🌍 Real World
Adding and renaming columns is common when cleaning and preparing data for reports or analysis in business settings.
💼 Career
Data analysts and data scientists often need to modify DataFrames to add calculated fields and improve column names for better understanding.
Progress0 / 4 steps
1
Create the initial sales DataFrame
Create a Spark DataFrame called sales_df with these exact columns and data: date as strings and items_sold as integers. The rows are: ('2024-04-01', 30), ('2024-04-02', 45), ('2024-04-03', 50).
Apache Spark
Hint
Use spark.createDataFrame with a list of tuples and specify the column names.
2
Add a new column for revenue
Create a variable called price_per_item and set it to 2.5. This is the price of one item in dollars.
Apache Spark
Hint
Just create a variable named price_per_item and assign it the value 2.5.
3
Add revenue column using price_per_item
Add a new column called revenue to sales_df. Calculate revenue by multiplying items_sold by price_per_item. Use the withColumn method and lit function from pyspark.sql.functions.
Apache Spark
Hint
Use withColumn('revenue', sales_df['items_sold'] * lit(price_per_item)) to add the new column.
4
Rename the items_sold column and show the DataFrame
Rename the column items_sold to quantity_sold using the withColumnRenamed method on sales_df. Then print the DataFrame using show().
Apache Spark
Hint
Use withColumnRenamed('items_sold', 'quantity_sold') and then show() to display the DataFrame.
Practice
(1/5)
1. What does the withColumn method do in Apache Spark DataFrame?
easy
A. Adds a new column or updates an existing column in the DataFrame
B. Deletes a column from the DataFrame
C. Renames a column in the DataFrame
D. Filters rows based on a condition
Solution
Step 1: Understand the purpose of withColumn
The withColumn method is used to add a new column or replace an existing column in a Spark DataFrame.
Step 2: Compare with other methods
Unlike withColumnRenamed which renames columns, withColumn changes or adds columns with new values or expressions.
Final Answer:
Adds a new column or updates an existing column in the DataFrame -> Option A
Quick Check:
withColumn = Add or update column [OK]
Hint: Use withColumn to add or change columns fast [OK]
Common Mistakes:
Confusing withColumn with withColumnRenamed
Thinking it deletes columns
Assuming it filters rows
2. Which of the following is the correct syntax to rename a column named oldName to newName in a Spark DataFrame df?
easy
A. df.rename("oldName", "newName")
B. df.withColumn("oldName", "newName")
C. df.renameColumn("oldName", "newName")
D. df.withColumnRenamed("oldName", "newName")
Solution
Step 1: Identify the correct method for renaming
The method to rename a column in Spark DataFrame is withColumnRenamed.
Step 2: Check syntax correctness
The syntax is df.withColumnRenamed("oldName", "newName"). Other options are invalid methods or misuse of withColumn.
Final Answer:
df.withColumnRenamed("oldName", "newName") -> Option D
Quick Check:
Rename column = withColumnRenamed [OK]
Hint: Rename columns only with withColumnRenamed method [OK]
A. withColumnRenamed cannot rename columns; use withColumn instead
B. Column 'Name' does not exist; use correct case 'name' in withColumnRenamed
C. Syntax error: missing parentheses in withColumnRenamed
D. No issue; code runs correctly and renames column
Solution
Step 1: Check column names in DataFrame
The DataFrame has columns 'id' and 'name' (lowercase). The code tries to rename 'Name' (uppercase N) which does not exist.
Step 2: Fix the column name case
Change withColumnRenamed("Name", "first_name") to withColumnRenamed("name", "first_name") to match exact column name.
Final Answer:
Column 'Name' does not exist; use correct case 'name' in withColumnRenamed -> Option B
Quick Check:
Column names are case-sensitive in Spark [OK]
Hint: Match exact column name case when renaming [OK]
Common Mistakes:
Ignoring case sensitivity of column names
Using withColumn instead of withColumnRenamed to rename
Assuming code runs without error despite wrong column name
5. You have a DataFrame df with columns ['id', 'score']. You want to add a new column grade based on score: if score ≥ 90 then 'A', else 'B'. Then rename score to exam_score. Which code correctly does this?
hard
A. df2 = df.withColumn('grade', when(df.score >= 90, 'A').otherwise('B')).renameColumn('score', 'exam_score')
B. df2 = df.withColumnRenamed('score', 'exam_score').withColumn('grade', when(df.score >= 90, 'A').otherwise('B'))
C. from pyspark.sql.functions import when
df2 = df.withColumn('grade', when(df.score >= 90, 'A').otherwise('B')).withColumnRenamed('score', 'exam_score')
D. df2 = df.withColumn('grade', when(df.score > 90, 'A').otherwise('B')).withColumnRenamed('score', 'exam_score')
Solution
Step 1: Add 'grade' column with condition on 'score'
Use when to assign 'A' if score ≥ 90, else 'B'. This is done with withColumn('grade', when(df.score >= 90, 'A').otherwise('B')).
Step 2: Rename 'score' column to 'exam_score'
Use withColumnRenamed('score', 'exam_score') to rename the column after adding 'grade'. The order matters to keep references correct.
Step 3: Check other options
df2 = df.withColumnRenamed('score', 'exam_score').withColumn('grade', when(df.score >= 90, 'A').otherwise('B')) uses old column name after renaming, causing error. df2 = df.withColumn('grade', when(df.score >= 90, 'A').otherwise('B')).renameColumn('score', 'exam_score') uses non-existent renameColumn. df2 = df.withColumn('grade', when(df.score > 90, 'A').otherwise('B')).withColumnRenamed('score', 'exam_score') uses > 90 instead of ≥ 90, which changes logic.
Final Answer:
from pyspark.sql.functions import when
df2 = df.withColumn('grade', when(df.score >= 90, 'A').otherwise('B')).withColumnRenamed('score', 'exam_score') -> Option C
Quick Check:
Add column with when, then rename column [OK]
Hint: Add conditional column first, then rename original column [OK]
Common Mistakes:
Renaming column before adding new column using old name
Using wrong comparison operator (> instead of >=)
Using non-existent renameColumn method
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.