See: Description
Class  Description 

Binarizer 
Binarize a column of continuous features given a threshold.

BucketedRandomProjectionLSH 
:: Experimental ::

BucketedRandomProjectionLSHModel 
:: Experimental ::

Bucketizer 
Bucketizer maps a column of continuous features to a column of feature buckets. 
ChiSqSelector 
ChiSquared feature selection, which selects categorical features to use for predicting a
categorical label.

ChiSqSelectorModel 
Model fitted by
ChiSqSelector . 
ColumnPruner 
Utility transformer for removing temporary columns from a DataFrame.

CountVectorizer 
Extracts a vocabulary from document collections and generates a
CountVectorizerModel . 
CountVectorizerModel 
Converts a text document to a sparse vector of token counts.

DCT 
A feature transformer that takes the 1D discrete cosine transform of a real vector.

Dot  
ElementwiseProduct 
Outputs the Hadamard product (i.e., the elementwise product) of each input vector with a
provided "weight" vector.

HashingTF 
Maps a sequence of terms to their term frequencies using the hashing trick.

IDF 
Compute the Inverse Document Frequency (IDF) given a collection of documents.

IDFModel 
Model fitted by
IDF . 
Imputer 
:: Experimental ::
Imputation estimator for completing missing values, either using the mean or the median
of the columns in which the missing values are located.

ImputerModel 
:: Experimental ::
Model fitted by
Imputer . 
IndexToString 
A
Transformer that maps a column of indices back to a new column of corresponding
string values. 
Interaction 
Implements the feature interaction transform.

LabeledPoint 
Class that represents the features and label of a data point.

MaxAbsScaler 
Rescale each feature individually to range [1, 1] by dividing through the largest maximum
absolute value in each feature.

MaxAbsScalerModel 
Model fitted by
MaxAbsScaler . 
MinHashLSH 
:: Experimental ::

MinHashLSHModel 
:: Experimental ::

MinMaxScaler 
Rescale each feature individually to a common range [min, max] linearly using column summary
statistics, which is also known as minmax normalization or Rescaling.

MinMaxScalerModel 
Model fitted by
MinMaxScaler . 
NGram 
A feature transformer that converts the input array of strings into an array of ngrams.

Normalizer 
Normalize a vector to have unit norm using the given pnorm.

OneHotEncoder 
A onehot encoder that maps a column of category indices to a column of binary vectors, with
at most a single onevalue per row that indicates the input category index.

PCA 
PCA trains a model to project vectors to a lower dimensional space of the top
PCA!.k
principal components. 
PCAModel 
Model fitted by
PCA . 
PolynomialExpansion 
Perform feature expansion in a polynomial space.

QuantileDiscretizer 
QuantileDiscretizer takes a column with continuous features and outputs a column with binned
categorical features. 
RegexTokenizer 
A regex based tokenizer that extracts tokens either by using the provided regex pattern to split
the text (default) or repeatedly matching the regex (if
gaps is false). 
RFormula 
:: Experimental ::
Implements the transforms required for fitting a dataset against an R model formula.

RFormulaModel 
:: Experimental ::
Model fitted by
RFormula . 
RFormulaParser 
Limited implementation of R formula parsing.

SQLTransformer 
Implements the transformations which are defined by SQL statement.

StandardScaler 
Standardizes features by removing the mean and scaling to unit variance using column summary
statistics on the samples in the training set.

StandardScalerModel 
Model fitted by
StandardScaler . 
StopWordsRemover 
A feature transformer that filters out stop words from input.

StringIndexer 
A label indexer that maps a string column of labels to an ML column of label indices.

StringIndexerModel 
Model fitted by
StringIndexer . 
Tokenizer 
A tokenizer that converts the input string to lowercase and then splits it by white spaces.

VectorAssembler 
A feature transformer that merges multiple columns into a vector column.

VectorAttributeRewriter 
Utility transformer that rewrites Vector attribute names via prefix replacement.

VectorIndexer 
Class for indexing categorical feature columns in a dataset of
Vector . 
VectorIndexerModel 
Model fitted by
VectorIndexer . 
VectorSlicer 
This class takes a feature vector and outputs a new feature vector with a subarray of the
original features.

Word2Vec 
Word2Vec trains a model of
Map(String, Vector) , i.e. 
Word2VecModel 
Model fitted by
Word2Vec . 
Word2VecModel.Word2VecModelWriter$ 
Transformer
s, which
transforms one Dataset
into another, e.g.,
HashingTF
.
Some feature transformers are implemented as Estimator
}s, because the
transformation requires some aggregated information of the dataset, e.g., document
frequencies in IDF
.
For those feature transformers, calling Estimator.fit(org.apache.spark.sql.Dataset<?>, org.apache.spark.ml.param.ParamPair<?>, org.apache.spark.ml.param.ParamPair<?>...)
is required to
obtain the model first, e.g., IDFModel
, in order to apply
transformation.
The transformation is usually done by appending new columns to the input
Dataset
, so all input columns are carried over.
We try to make each transformer minimal, so it becomes flexible to assemble feature
transformation pipelines.
Pipeline
can be used to chain feature transformers, and
VectorAssembler
can be used to combine multiple feature
transformations, for example:
import java.util.Arrays;
import org.apache.spark.api.java.JavaRDD;
import static org.apache.spark.sql.types.DataTypes.*;
import org.apache.spark.sql.types.StructType;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.Row;
import org.apache.spark.ml.feature.*;
import org.apache.spark.ml.Pipeline;
import org.apache.spark.ml.PipelineStage;
import org.apache.spark.ml.PipelineModel;
// a DataFrame with three columns: id (integer), text (string), and rating (double).
StructType schema = createStructType(
Arrays.asList(
createStructField("id", IntegerType, false),
createStructField("text", StringType, false),
createStructField("rating", DoubleType, false)));
JavaRDD<Row> rowRDD = jsc.parallelize(
Arrays.asList(
RowFactory.create(0, "Hi I heard about Spark", 3.0),
RowFactory.create(1, "I wish Java could use case classes", 4.0),
RowFactory.create(2, "Logistic regression models are neat", 4.0)));
Dataset<Row> dataset = jsql.createDataFrame(rowRDD, schema);
// define feature transformers
RegexTokenizer tok = new RegexTokenizer()
.setInputCol("text")
.setOutputCol("words");
StopWordsRemover sw = new StopWordsRemover()
.setInputCol("words")
.setOutputCol("filtered_words");
HashingTF tf = new HashingTF()
.setInputCol("filtered_words")
.setOutputCol("tf")
.setNumFeatures(10000);
IDF idf = new IDF()
.setInputCol("tf")
.setOutputCol("tf_idf");
VectorAssembler assembler = new VectorAssembler()
.setInputCols(new String[] {"tf_idf", "rating"})
.setOutputCol("features");
// assemble and fit the feature transformation pipeline
Pipeline pipeline = new Pipeline()
.setStages(new PipelineStage[] {tok, sw, tf, idf, assembler});
PipelineModel model = pipeline.fit(dataset);
// save transformed features with raw data
model.transform(dataset)
.select("id", "text", "rating", "features")
.write().format("parquet").save("/output/path");
Some feature transformers implemented in MLlib are inspired by those implemented in scikitlearn.
The major difference is that most scikitlearn feature transformers operate eagerly on the entire
input dataset, while MLlib's feature transformers operate lazily on individual columns,
which is more efficient and flexible to handle large and complex datasets.