Feature transformers help prepare data for machine learning by combining and scaling features. This makes models work better and faster.
Feature transformers (VectorAssembler, StandardScaler) in Apache Spark
from pyspark.ml.feature import VectorAssembler, StandardScaler assembler = VectorAssembler(inputCols=["col1", "col2"], outputCol="features") scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures", withMean=True, withStd=True)
VectorAssembler combines multiple columns into one vector column.
StandardScaler scales features to have zero mean and unit variance.
assembler = VectorAssembler(inputCols=["height", "weight"], outputCol="features")
scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures", withMean=True, withStd=True)
assembled_data = assembler.transform(df) scaled_data = scaler.fit(assembled_data).transform(assembled_data)
This program creates a Spark DataFrame with height and weight columns. It uses VectorAssembler to combine these into a single vector column called 'features'. Then, it uses StandardScaler to scale these features so they have zero mean and unit variance, creating a new column 'scaledFeatures'. Finally, it shows the original and scaled features.
from pyspark.sql import SparkSession from pyspark.ml.feature import VectorAssembler, StandardScaler # Start Spark session spark = SparkSession.builder.appName("FeatureTransformersExample").getOrCreate() # Sample data data = [(1, 10.0, 100.0), (2, 20.0, 200.0), (3, 30.0, 300.0)] columns = ["id", "height", "weight"] df = spark.createDataFrame(data, columns) # Combine height and weight into features vector assembler = VectorAssembler(inputCols=["height", "weight"], outputCol="features") assembled_df = assembler.transform(df) # Scale features to zero mean and unit variance scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures", withMean=True, withStd=True) scaler_model = scaler.fit(assembled_df) scaled_df = scaler_model.transform(assembled_df) # Show results scaled_df.select("id", "features", "scaledFeatures").show(truncate=False) spark.stop()
VectorAssembler output is a vector column, not separate columns.
StandardScaler requires fitting on data before transforming.
Scaling helps algorithms that are sensitive to feature scale, like k-means or logistic regression.
Use VectorAssembler to combine multiple columns into one vector column.
Use StandardScaler to scale features to zero mean and unit variance.
These transformers prepare data for better machine learning model performance.
Practice
VectorAssembler in Apache Spark's feature transformers?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 CQuick Check:
VectorAssembler = combine columns [OK]
- Confusing VectorAssembler with StandardScaler
- Thinking it splits vectors instead of combining
- Assuming it handles missing values
VectorAssembler in PySpark to combine columns 'age' and 'income' into '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 AQuick Check:
inputCols and outputCol are correct parameters [OK]
- Swapping inputCols and outputCol names
- Using singular inputCol instead of inputCols
- Using wrong parameter names like columns or output
scaled_features.show()?
from pyspark.ml.feature import VectorAssembler, StandardScaler
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
data = [(1, 10.0, 100.0), (2, 20.0, 200.0), (3, 30.0, 300.0)]
df = spark.createDataFrame(data, ['id', 'feature1', 'feature2'])
assembler = VectorAssembler(inputCols=['feature1', 'feature2'], outputCol='features')
assembled = assembler.transform(df)
scaler = StandardScaler(inputCol='features', outputCol='scaledFeatures', withMean=True, withStd=True)
scalerModel = scaler.fit(assembled)
scaled_features = scalerModel.transform(assembled).select('id', 'scaledFeatures')Solution
Step 1: Understand VectorAssembler output
VectorAssembler creates a 'features' vector column combining 'feature1' and 'feature2'.Step 2: Apply StandardScaler
StandardScaler scales 'features' to zero mean and unit variance, outputting 'scaledFeatures'.Final Answer:
A DataFrame with 'id' and 'scaledFeatures' columns where features are scaled to zero mean and unit variance -> Option AQuick Check:
VectorAssembler + StandardScaler = scaled features [OK]
- Expecting original columns unchanged after scaling
- Thinking StandardScaler causes error after VectorAssembler
- Missing 'id' column in output
StandardScaler:
assembler = VectorAssembler(inputCols=['f1', 'f2'], outputCol='features') df2 = assembler.transform(df) scaler = StandardScaler(inputCol='features', outputCol='scaled', withMean=False, withStd=True) scaled_df = scaler.transform(df2)
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 BQuick Check:
StandardScaler needs fit() before transform() [OK]
- Calling transform() without fit() on StandardScaler
- Confusing inputCol and outputCol names
- Assuming withMean must be True
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 DQuick Check:
Combine first, then scale with fit() [OK]
- Scaling columns before combining
- Skipping fit() on StandardScaler
- Combining after scaling
Ready to prove it?
Pass the test and this pattern moves unknown
