2017-02-21 69 views
0

在我可以在當前數據幀上使用機器學習模型之前,我必須應用幾個預處理步驟。這包括將若干分類列轉換爲索引列,其中StringIndexer s和編碼列與OneHotEncoder s。Apache Spark如何連接(多個)索引器和編碼器到流水線中

我想將所有的轉換方法放入管道中,以便將其保留並將其輕鬆應用於傳入數據。但是由於索引列還不存在,在編碼器上調用fit()方法失敗。

如何創建由所有這些步驟組成的管道?

回答

0

您可以同時威脅索引器和編碼器 - 因爲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); 
相關問題