2017-02-21 4 views
0

現在のデータフレームで機械学習モデルを使用するには、いくつかの前処理ステップを適用する必要があります。これには、いくつかのカテゴリの列をStringIndexer秒のインデックス列に変換し、新しい列をOneHotEncoder秒でエンコードします。Apache Spark(複数の)インデクサーとエンコーダーをパイプラインに連結する方法

すべての変換メソッドをパイプラインに入れて永続化し、着信データに簡単に適用したいと考えています。ただし、インデックス付きの列はまだ存在しないため、エンコーダでfit()メソッドを呼び出すと失敗します。

これらのすべての手順で構成されるパイプラインを作成するにはどうすればよいですか?

答えて

0

インデクサーとエンコーダの両方に脅威を与える可能性があります。PipelineStageとしてパイプラインに追加し、パイプライン全体を1つのステップで合わせることができます。例:

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); 
関連する問題