Bird
Raised Fist0
Apache Sparkdata~10 mins

Type casting and null handling in Apache Spark - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Type casting and null handling
Start with DataFrame
↓
Select column to cast
↓
Apply cast to target type
↓
Check for nulls
↓
Handle nulls: fill/drop
↓
Nulls handled
↓
Resulting DataFrame with casted types and nulls handled
↓
End
Start with a DataFrame, cast columns to new types, check for nulls, handle them by filling or dropping, then get the final cleaned DataFrame.
Execution Sample
Apache Spark
from pyspark.sql.functions import col

df = spark.createDataFrame([(1, '10'), (2, None), (3, '30')], ['id', 'value'])
df2 = df.withColumn('value_int', col('value').cast('int'))
df3 = df2.na.fill({'value_int': 0})
Create a DataFrame, cast 'value' column to integer, then fill nulls in 'value_int' with 0.
Execution Table
StepActionColumn 'value'Column 'value_int'Null HandlingOutput
1Create DataFrame['10', None, '30']N/AN/A[{'id':1,'value':'10'}, {'id':2,'value':None}, {'id':3,'value':'30'}]
2Cast 'value' to int['10', None, '30'][10, null, 30]N/A[{'id':1,'value':'10','value_int':10}, {'id':2,'value':None,'value_int':null}, {'id':3,'value':'30','value_int':30}]
3Fill nulls in 'value_int' with 0['10', None, '30'][10, 0, 30]Null replaced with 0[{'id':1,'value':'10','value_int':10}, {'id':2,'value':None,'value_int':0}, {'id':3,'value':'30','value_int':30}]
💡 All nulls in 'value_int' replaced, casting complete.
Variable Tracker
VariableStartAfter Step 2After Step 3
df[{'id':1,'value':'10'}, {'id':2,'value':None}, {'id':3,'value':'30'}]SameSame
df2N/A[{'id':1,'value':'10','value_int':10}, {'id':2,'value':None,'value_int':null}, {'id':3,'value':'30','value_int':30}]Same
df3N/AN/A[{'id':1,'value':'10','value_int':10}, {'id':2,'value':None,'value_int':0}, {'id':3,'value':'30','value_int':30}]
Key Moments - 2 Insights
Why does casting a string column with None values to int produce nulls instead of errors?
Casting converts valid strings to integers but replaces None or invalid strings with nulls, as shown in step 2 of the execution_table where 'None' becomes null in 'value_int'.
How does filling nulls with a value like 0 affect the DataFrame?
Filling nulls replaces all null entries with the specified value, preventing null-related errors later. Step 3 shows null in 'value_int' replaced by 0.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at Step 2, what is the value of 'value_int' for the row where 'value' is None?
A10
Bnull
C0
DNone
💡 Hint
Check the 'Column value_int' at Step 2 in execution_table for the row with 'value' None.
At which step are nulls in 'value_int' replaced with 0?
AStep 1
BStep 2
CStep 3
DNo step replaces nulls
💡 Hint
Look at the 'Null Handling' column in execution_table.
If we skip the null filling step, what would be the value of 'value_int' for the row with 'value' None?
Anull
B0
CNone
DError
💡 Hint
Refer to Step 2 in execution_table where casting happens but no null filling yet.
Concept Snapshot
Type casting changes column data types (e.g., string to int).
Nulls appear when casting invalid or missing data.
Use na.fill() or na.drop() to handle nulls.
Filling nulls prevents errors in later processing.
Always check data after casting for nulls.
Full Transcript
We start with a DataFrame containing strings and None values. We cast the string column to integers. Valid strings become integers, but None becomes null. Then, we fill nulls with zero to avoid problems later. This process ensures the data is clean and ready for analysis.

Practice

(1/5)
1. What does the cast() function do in Apache Spark DataFrames?
easy
A. It sorts the DataFrame by a column.
B. It removes null values from a DataFrame.
C. It filters rows based on a condition.
D. It changes the data type of a column to another specified type.

Solution

  1. Step 1: Understand the purpose of cast()

    The cast() function is used to convert the data type of a column in a Spark DataFrame to another type, such as from string to integer.
  2. Step 2: Compare with other options

    Other options describe different functions: removing nulls, filtering, or sorting, which are not related to type casting.
  3. Final Answer:

    It changes the data type of a column to another specified type. -> Option D
  4. Quick Check:

    cast() changes type = A [OK]
Hint: Remember: cast() changes column types, not data values [OK]
Common Mistakes:
  • Confusing cast() with filtering or sorting functions
  • Thinking cast() removes null values
  • Assuming cast() modifies data content instead of type
2. Which of the following is the correct syntax to cast a column named age to integer type in Spark DataFrame?
easy
A. df.select(df.age.convert('int'))
B. df.select(df.age.cast('int'))
C. df.select(df.age.toInt())
D. df.select(cast(df.age, 'int'))

Solution

  1. Step 1: Recall the correct cast syntax in Spark

    In Spark, to cast a column, you use column.cast('type'). So df.age.cast('int') is correct.
  2. Step 2: Check other options for syntax errors

    df.select(cast(df.age, 'int')) uses cast as a function incorrectly. df.select(df.age.toInt()) uses a method toInt() which does not exist in Spark DataFrame columns. df.select(df.age.convert('int')) uses convert() which is not a Spark method.
  3. Final Answer:

    df.select(df.age.cast('int')) -> Option B
  4. Quick Check:

    Use column.cast('type') syntax = D [OK]
Hint: Use column.cast('type') to cast columns [OK]
Common Mistakes:
  • Using Python native methods like toInt() on Spark columns
  • Trying to use cast as a standalone function
  • Using non-existent methods like convert()
3. Given the following Spark code:
from pyspark.sql.functions import col

df = spark.createDataFrame([("25",), ("30",), (None,)], ["age"])
df2 = df.select(col("age").cast("int").alias("age_int"))
df2.show()

What will be the output?
medium
A. +-------+ |age_int| +-------+ | 25| | 30| | null| +-------+
B. +-------+ |age_int| +-------+ | 25| | 30| | 0| +-------+
C. RuntimeError due to casting None to int
D. SyntaxError in code

Solution

  1. Step 1: Understand casting behavior with nulls

    Casting a string column with None values to integer results in integer values for valid strings and null for None values, not zero or error.
  2. Step 2: Check the output of show()

    The DataFrame will display 25 and 30 as integers, and null for the None entry.
  3. Final Answer:

    +-------+ |age_int| +-------+ | 25| | 30| | null| +-------+ -> Option A
  4. Quick Check:

    Nulls remain null after cast = B [OK]
Hint: Casting None keeps null, does not convert to zero [OK]
Common Mistakes:
  • Expecting None to become 0 after cast
  • Thinking casting None causes error
  • Confusing syntax errors with runtime behavior
4. Identify the error in this Spark code snippet that tries to replace nulls in column salary with 0:
df = df.withColumn("salary", df["salary"].cast("int").fillna(0))
medium
A. withColumn() requires a function, not a column.
B. cast() cannot convert salary to int.
C. fillna() cannot be called on a Column object; it should be called on DataFrame.
D. The syntax is correct; no error.

Solution

  1. Step 1: Understand method chaining on Column vs DataFrame

    In Spark, fillna() is a DataFrame method, not a Column method. Calling fillna() on a Column object causes an error.
  2. Step 2: Correct usage

    To replace nulls after casting, use df = df.withColumn('salary', df['salary'].cast('int')) then df = df.fillna({'salary': 0}).
  3. Final Answer:

    fillna() cannot be called on a Column object; it should be called on DataFrame. -> Option C
  4. Quick Check:

    fillna() on DataFrame, not Column = C [OK]
Hint: Remember: fillna() is for DataFrame, not Column [OK]
Common Mistakes:
  • Calling fillna() on a Column instead of DataFrame
  • Assuming cast() changes null values automatically
  • Misusing withColumn() syntax
5. You have a DataFrame with a string column score containing numeric strings and some nulls. You want to create a new integer column score_int where nulls become -1 after casting. Which code correctly does this?
hard
A. df.withColumn('score_int', when(col('score').isNull(), -1).otherwise(col('score').cast('int')))
B. df.withColumn('score_int', col('score').cast('int').fillna(-1))
C. df.withColumn('score_int', col('score').cast('int').fillna({'score_int': -1}))
D. df.withColumn('score_int', col('score').cast('int').na.fill(-1))

Solution

  1. Step 1: Understand null handling with casting

    Casting null strings to int results in null integers. To replace nulls with -1 in the new column, use when() to check nulls before casting.
  2. Step 2: Analyze options

    df.withColumn('score_int', when(col('score').isNull(), -1).otherwise(col('score').cast('int'))) uses when() to assign -1 if null, else cast. Options B, C, and D try to fill nulls after casting, but fillna() or na.fill() on columns or DataFrames after casting may not replace nulls correctly or require separate steps.
  3. Final Answer:

    df.withColumn('score_int', when(col('score').isNull(), -1).otherwise(col('score').cast('int'))) -> Option A
  4. Quick Check:

    Use when() for conditional null replacement before cast = A [OK]
Hint: Use when() to replace nulls before casting [OK]
Common Mistakes:
  • Using fillna() on columns instead of DataFrame
  • Expecting fillna() to replace nulls after cast automatically
  • Not handling nulls before casting
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