有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在对当前数据帧使用机器学习模型之前,我必须应用几个预处理步骤。这包括将几个分类列转换为带有StringIndexer的索引列,并使用OneHotEncoder新的列进行编码

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

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


共 (1) 个答案

  1. # 1 楼答案

    你可以同时威胁索引器和编码器,因为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);