Apache Spark 如何将(多个)索引器和编码器连接到管道中

Apache Spark how to concatenate (multiple) indexers and encoders into a pipeline

在我可以在我当前的数据帧上使用机器学习模型之前,我必须应用几个预处理步骤。这包括将多个分类列转换为具有 StringIndexers 的索引列,以及使用 OneHotEncoders 对 new 列进行编码。

我想将所有转换方法放入一个管道中以持久保存并轻松应用于传入数据。但是由于索引列尚不存在,因此在编码器上调用 fit() 方法失败。

如何创建包含所有这些步骤的管道?

您可以同时威胁索引器和编码器,因为 PipelineStage 将它们添加到您的管道中并一步完成整个管道。示例:

String INDEX_APPENDIX = "_IDX";
String VECTOR_APPENDIX = "_VEC";
ArrayList<PipelineStage> stages = new ArrayList<>();

for (String column : Arrays.asList("col1", "col2" )) {
        stages.add(new StringIndexer().setInputCol(column).setOutputCol(column + INDEX_APPENDIX));
        stages.add(new OneHotEncoder().setInputCol(column + INDEX_APPENDIX).setOutputCol(column +
                VECTOR_APPENDIX));
    }

Pipeline pipeline = new Pipeline()
    .setStages(stages.toArray(new PipelineStage[stages.size()]));

Dataset<Row> processedDf = pipeline.fit(df).transform(df);