Feature transformers with VectorAssembler and StandardScaler in Apache Spark
📖 Scenario: You work as a data scientist preparing data for a machine learning model. You have raw numeric features that need to be combined and scaled before training.
🎯 Goal: Build a Spark DataFrame with numeric columns, combine them into a single feature vector using VectorAssembler, then scale the features using StandardScaler.
📋 What You'll Learn
Create a Spark DataFrame with columns height, weight, and age with given values
Create a VectorAssembler to combine height, weight, and age into a new column features
Create a StandardScaler to scale the features column into scaledFeatures
Show the final DataFrame with features and scaledFeatures columns
💡 Why This Matters
🌍 Real World
Feature transformers like VectorAssembler and StandardScaler are essential in preparing raw data for machine learning models, ensuring features are combined and normalized properly.
💼 Career
Data scientists and machine learning engineers use these transformers daily to preprocess data before training models in Spark environments.
Progress0 / 4 steps
1
Create the initial Spark DataFrame
Create a Spark DataFrame called df with columns height, weight, and age using these exact rows: (5.5, 65, 25), (6.0, 70, 30), (5.8, 68, 28). Use spark.createDataFrame with a list of tuples and specify the schema as ["height", "weight", "age"].
Apache Spark
Hint
Use spark.createDataFrame with a list of tuples and specify the column names as a list.
2
Create a VectorAssembler to combine features
Create a VectorAssembler called assembler that combines the columns height, weight, and age into a new column called features. Use inputCols and outputCol parameters.
Apache Spark
Hint
Use VectorAssembler(inputCols=["height", "weight", "age"], outputCol="features").
3
Create a StandardScaler to scale the features
Create a StandardScaler called scaler that takes the features column as input and outputs a scaled vector column called scaledFeatures. Set withMean=True and withStd=True.
Apache Spark
Hint
Use StandardScaler(inputCol="features", outputCol="scaledFeatures", withMean=True, withStd=True).
4
Transform the data and show the results
Use the assembler to transform df and create a new DataFrame assembled_df. Then use the scaler to fit and transform assembled_df to create scaled_df. Finally, show the features and scaledFeatures columns of scaled_df using show().
Apache Spark
Hint
Use assembler.transform(df), then scaler.fit(...) and transform(...). Finally, use select(...).show().
Practice
(1/5)
1. What is the main purpose of the VectorAssembler in Apache Spark's feature transformers?
easy
A. To remove missing values from the dataset
B. To scale features to have zero mean and unit variance
C. To combine multiple columns into a single vector column
D. To split a vector column into multiple columns
Solution
Step 1: Understand VectorAssembler's role
VectorAssembler is used to combine several feature columns into one vector column, which is needed for ML algorithms.
Step 2: Differentiate from other transformers
StandardScaler scales features, but VectorAssembler only combines columns into a vector.
Final Answer:
To combine multiple columns into a single vector column -> Option C
Quick Check:
VectorAssembler = combine columns [OK]
Hint: VectorAssembler joins columns into one vector column [OK]
Common Mistakes:
Confusing VectorAssembler with StandardScaler
Thinking it splits vectors instead of combining
Assuming it handles missing values
2. Which of the following is the correct way to create a VectorAssembler in PySpark to combine columns 'age' and 'income' into 'features'?
easy
A. VectorAssembler(inputCols=['age', 'income'], outputCol='features')
B. VectorAssembler(outputCols=['age', 'income'], inputCol='features')
C. VectorAssembler(inputCol=['age', 'income'], outputCols='features')
D. VectorAssembler(columns=['age', 'income'], output='features')
Solution
Step 1: Recall VectorAssembler syntax
The correct parameters are inputCols (list of input columns) and outputCol (name of output vector column).
Step 2: Match parameters with options
VectorAssembler(inputCols=['age', 'income'], outputCol='features') uses inputCols and outputCol correctly; others misuse parameter names or types.
Final Answer:
VectorAssembler(inputCols=['age', 'income'], outputCol='features') -> Option A
Quick Check:
inputCols and outputCol are correct parameters [OK]
Hint: Use inputCols and outputCol parameters exactly [OK]
Common Mistakes:
Swapping inputCols and outputCol names
Using singular inputCol instead of inputCols
Using wrong parameter names like columns or output
3. Given the following PySpark code, what will be the output of scaled_features.show()?
B. Missing call to fit() before transform() on StandardScaler
C. VectorAssembler outputCol should be 'scaled' not 'features'
D. withMean must be True for StandardScaler to work
Solution
Step 1: Check StandardScaler usage
StandardScaler requires calling fit() on data before transform().
Step 2: Identify missing fit() call
The code calls transform() directly on scaler without fit(), causing error.
Final Answer:
Missing call to fit() before transform() on StandardScaler -> Option B
Quick Check:
StandardScaler needs fit() before transform() [OK]
Hint: Always fit StandardScaler before transform [OK]
Common Mistakes:
Calling transform() without fit() on StandardScaler
Confusing inputCol and outputCol names
Assuming withMean must be True
5. You have a dataset with columns 'height', 'weight', and 'age'. You want to prepare features for a machine learning model by combining these columns into a single vector and scaling them to zero mean and unit variance. Which sequence of steps correctly achieves this in PySpark?
hard
A. Use StandardScaler first on raw columns, then combine with VectorAssembler
B. Apply StandardScaler separately on each column, then combine with VectorAssembler
C. Combine columns with VectorAssembler and use StandardScaler without fitting
D. Use VectorAssembler to combine columns, then fit and transform with StandardScaler on the assembled vector
Solution
Step 1: Combine columns using VectorAssembler
VectorAssembler merges 'height', 'weight', and 'age' into one vector column for ML models.
Step 2: Fit and transform the assembled vector with StandardScaler
StandardScaler requires fitting on the vector column to scale features properly.
Final Answer:
Use VectorAssembler to combine columns, then fit and transform with StandardScaler on the assembled vector -> Option D
Quick Check:
Combine first, then scale with fit() [OK]
Hint: Combine columns first, then fit StandardScaler [OK]
Common Mistakes:
Scaling columns before combining
Skipping fit() on StandardScaler
Combining after scaling
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.