2017-02-21 6 views
0

Прежде чем я смогу использовать модель машинного обучения на моем текущем фрейме данных, я должен применить несколько шагов предварительной обработки. Это включает преобразование нескольких категориальных столбцов в индексные столбцы с StringIndexer s и кодирование новых столбцов с OneHotEncoder.Apache Spark как конкатенировать (несколько) индексаторов и кодеров в конвейер

Я хочу, чтобы все методы преобразования в конвейере сохранялись и легко применялись к входящим данным. Но поскольку индексированные столбцы еще не существуют, вызов метода fit() на кодах не выполняется.

Как создать конвейер, который состоит из всех этих шагов?

ответ

0

Вы можете угрожать как указателям, так и энкодерам - как PipelineStage s добавить их в свой трубопровод и поместить весь трубопровод за один шаг. Пример:

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); 
Смежные вопросы