2016-04-27 35 views
1

我有這樣的代碼,一直給我一個意外的錯誤的結果,我解決不了:阿帕奇星火的forEach:返回所有Tuple2s一個值在我RDD

// A method that calls the collectDataRDD(logValues, rowData) method : 

// .... 
// my collectDataRDD(Values, rowData) method : 

的問題是當我嘗試在數據對象上運行方法getStatus()或getValidationDate()時,它們是我的Tuple2的值,它只爲我的JavaRDD中的所有對象提供了一個輸出,這是錯誤的,因爲JavaRDD包含多個不同的對象。但是,當我檢查我的tuple2的鍵時,它給了我正確的結果。

我已經嘗試了一切,仍然無法弄清楚。任何人都可以請幫我解決這個問題。 提前感謝。

+0

你在本地或分佈式模式下運行此代碼? – mgaido

+0

我在本地模式下運行它。 –

回答

0

驗證是否

ticketsrdd.foreach((Tuple2<String, Data> rowData) -> { 
    collectLogDataRDD(logValues, rowData); 
} 

是你想要做什麼。這個函數被逐個調用,Tuple2在這種情況下只有一個入口。

+0

謝謝你的回覆。我想在我的rdd的每個Tuple2上運行collectLogDataRDD()。所以是的,我每次只需要一個條目。 –

+0

如果我理解正確,那麼您的意思是collectLogDataRDD只會被調用一次。那是對的嗎? – tesnik03

+0

在我的RDD的每個Tuple2上調用Nop collectLogDataRDD。我用「ticketsrdd.foreach」。 –

0
JavaRDD<Tuple2<String, Data>> ticketsrdd=TransformToRDD.transformToRDD(transformer.transform()); 
DataStore.setData(tickets); 

將是種Map<String, Tuple2>。而你的Tuple2將有一個鍵作爲字符串和一個值作爲數據。

現在當你說Data ticket = rowData._2;你從1元組獲得1個數據對象。所以對於ticketsrdd中的每個元組,它將被稱爲collectLogDataRDD

假設ticketsrdd有100個元素,那麼它將調用collectLogDataRDD 100次,每次調用ticket.getStatus();也會被調用。

這是代碼正在做的事情。你期望什麼不同的行爲?

+0

這正是我所期待的。但是,代碼僅處理一個Tuple2並忽略其餘部分。 –

+0

好的,你在做ticketrdd.count時看到了什麼? – tesnik03

+0

ticketsrdd.count給出106作爲結果。 –