2017-10-10 20 views
0

我想有從DOFN方法兩個輸出,下面的例子Apache Beam programming guide通TupleTag到DOFN方法

基本上在這個例子中,你通過一個TupleTag,然後指定到使輸出,這對我的作品的問題是,我所說的帕爾多內外部的方法,不知道怎麼打發這個TupleTag,這是我的代碼:

PCollectionTuple processedData = pubEv 
    .apply("Processing", ParDo.of(new HandleEv()) 
     .withOutputTags(mainData, TupleTagList.of(failedData))); 

HandleEv方法:

static class HandleEv extends DoFn<String, String> { 
    @ProcessElement 
    public void processElement(ProcessContext c) throws Exception { 
     c.output("test") 
     c.output(failedData,"failed") 
    } 
} 

我得到的錯誤是cannot find symbol as failedData不能從HandleEv訪問,我嘗試在類的開始處聲明failedData,但兩者都不起作用。

非常感謝您

回答

2

你可以做到這一點,你將一個值傳遞給任何其他對象以相同的方式 - 傳中作爲參數傳遞的HandleEv構造並將其存儲在一個領域:

static class HandleEv extends DoFn<String, String> { 
    private final TupleTag<String> failedData; 
    public HandleEv(TupleTag<String> failedData) { 
    this.failedData = failedData; 
    } 

    @ProcessElement 
    public void processElement(ProcessContext c) throws Exception { 
    c.output("test") 
    c.output(failedData,"failed") 
    } 
} 

,然後用它是這樣的:

PCollectionTuple processedData = pubEv 
    .apply("Processing", ParDo.of(new HandleEv(failedData)) 
     .withOutputTags(mainData, TupleTagList.of(failedData))); 
+0

好像它的工作原理,我將完成邏輯來處理側輸出覈實,如果我可以訪問哪些WA保存到TupleTag並確認答案,謝謝! – Matias