Classification helps us sort data into groups. Spark makes it easy to do this fast on big data using models like Logistic Regression and Random Forest.
Classification with Spark (LogisticRegression, RandomForest) in Apache Spark
from pyspark.ml.classification import LogisticRegression, RandomForestClassifier # Create Logistic Regression model lr = LogisticRegression(featuresCol='features', labelCol='label') # Create Random Forest model rf = RandomForestClassifier(featuresCol='features', labelCol='label', numTrees=10)
featuresCol is the column with input data features.
labelCol is the column with the target group labels.
lr = LogisticRegression(featuresCol='features', labelCol='label')
rf = RandomForestClassifier(featuresCol='features', labelCol='label', numTrees=20)
This program creates a small dataset, prepares features, trains Logistic Regression and Random Forest models, and shows their predictions.
from pyspark.sql import SparkSession from pyspark.ml.classification import LogisticRegression, RandomForestClassifier from pyspark.ml.feature import VectorAssembler # Start Spark session spark = SparkSession.builder.appName('ClassificationExample').getOrCreate() # Sample data: features and label data = [ (0, 1.0, 0.1, 0.2), (1, 2.0, 1.1, 1.2), (0, 1.3, 0.2, 0.3), (1, 3.0, 1.5, 1.3), (0, 0.8, 0.1, 0.1), (1, 2.5, 1.3, 1.1) ] # Create DataFrame with columns: label, feature1, feature2, feature3 df = spark.createDataFrame(data, ['label', 'f1', 'f2', 'f3']) # Combine features into one vector column assembler = VectorAssembler(inputCols=['f1', 'f2', 'f3'], outputCol='features') assembled_df = assembler.transform(df) # Select only label and features final_df = assembled_df.select('label', 'features') # Logistic Regression model lr = LogisticRegression(featuresCol='features', labelCol='label') lr_model = lr.fit(final_df) lr_predictions = lr_model.transform(final_df) print('Logistic Regression Predictions:') lr_predictions.select('label', 'prediction', 'probability').show() # Random Forest model rf = RandomForestClassifier(featuresCol='features', labelCol='label', numTrees=5) rf_model = rf.fit(final_df) rf_predictions = rf_model.transform(final_df) print('Random Forest Predictions:') rf_predictions.select('label', 'prediction', 'probability').show() spark.stop()
Make sure your features are combined into a single vector column before training.
Logistic Regression works well for simple binary problems.
Random Forest can handle more complex data and usually gives better accuracy.
Classification sorts data into groups using models.
Spark MLlib offers Logistic Regression and Random Forest for classification.
Prepare data by combining features, then train and predict with these models.
Practice
Solution
Step 1: Understand Logistic Regression's goal
Logistic Regression predicts the probability that an input belongs to a class, usually binary (yes/no).Step 2: Compare with other options
Clustering is unsupervised, feature reduction is different, and random trees relate to Random Forest, not Logistic Regression.Final Answer:
To predict the probability of a binary outcome -> Option AQuick Check:
Logistic Regression = Binary probability prediction [OK]
- Confusing classification with clustering
- Thinking Logistic Regression reduces features
- Mixing Logistic Regression with Random Forest
Solution
Step 1: Recall correct import syntax
The correct import uses 'from pyspark.ml.classification import LogisticRegression' with exact casing.Step 2: Check other options for errors
import LogisticRegression from pyspark.ml has wrong import order, C misses classification submodule, D uses wrong case for class name.Final Answer:
from pyspark.ml.classification import LogisticRegression -> Option BQuick Check:
Correct import syntax = from pyspark.ml.classification import LogisticRegression [OK]
- Wrong import order or missing submodule
- Incorrect capitalization of class names
- Assuming all classes are in pyspark.ml directly
predictions.select('prediction').show()?
from pyspark.ml.classification import LogisticRegression from pyspark.ml.feature import VectorAssembler # Sample data data = spark.createDataFrame([ (0, 1.0, 3.0), (1, 2.0, 1.0), (0, 1.5, 2.5) ], ['label', 'feature1', 'feature2']) assembler = VectorAssembler(inputCols=['feature1', 'feature2'], outputCol='features') data = assembler.transform(data) lr = LogisticRegression(featuresCol='features', labelCol='label') model = lr.fit(data) predictions = model.transform(data)
Solution
Step 1: Understand model.transform output
LogisticRegression's transform adds a 'prediction' column with predicted labels (0.0 or 1.0).Step 2: Check what predictions.select('prediction').show() does
This command displays the predicted labels for each row, not features or original labels.Final Answer:
Shows predicted labels as 0.0 or 1.0 for each row -> Option AQuick Check:
Prediction column = predicted labels [OK]
- Expecting raw features instead of predictions
- Assuming 'prediction' column is missing
- Confusing label column with prediction column
from pyspark.ml.classification import RandomForestClassifier
rf = RandomForestClassifier(labelCol='label', featuresCol='features')
model = rf.fit(data)
predictions = model.transform(data)
predictions.select('prediction').show()
Assuming data has columns 'label' and 'features'.Solution
Step 1: Check if data has required columns
The question states data already has 'label' and 'features' columns, so no need to assemble features here.Step 2: Verify RandomForestClassifier usage
RandomForestClassifier can run with default parameters; numTrees is optional. The code fits and predicts correctly.Final Answer:
No error; code runs correctly -> Option DQuick Check:
Data with 'features' and 'label' = code runs [OK]
- Assuming numTrees is mandatory
- Forgetting features must be assembled before fitting
- Confusing import errors with runtime errors
Solution
Step 1: Understand overfitting and feature impact
Overfitting happens when model is too complex; limiting tree depth in RandomForest helps reduce it.Step 2: Evaluate options for improving accuracy
Increasing trees and limiting depth balances bias and variance. LogisticRegression without scaling or removing label harms model. Using one feature loses information.Final Answer:
Use RandomForest with more trees and limit tree depth -> Option CQuick Check:
Control complexity to reduce overfitting [OK]
- Ignoring feature scaling when needed
- Removing label column by mistake
- Using too few features reduces accuracy
Ready to prove it?
Pass the test and this pattern moves unknown
