2011-05-25 58 views
12

是否可以在SpringBatch中執行MapReduce樣式操作?SpringBatch中的MapReduce/Aggregate操作

我在批量作業中有兩個步驟。第一步計算平均值。第二步將每個值與平均值進行比較以確定另一個值。

例如,讓我說我有一個龐大的學生成績數據庫。第一步計算每門課程/考試的平均分數。第二步個人得分比較平均,以確定分級基於一些簡單的規則:

  1. 甲如果學生的分數高於平均
  2. 乙如果學生成績是平均
  3. C如果學生的分數低於平均

目前我的第一步是選擇平均值並將其寫入表的Sql。第二步是一個Sql,將平均分與個人分數結合起來,並使用處理器來實現該規則。

有類似的聚合函數,如avg,min在步驟中使用了很多,我真的更喜歡如果這可以在處理器中完成,保持Sqls儘可能簡單。有沒有辦法編寫一個處理器,它根據分組標準在多行上聚合結果,然後將平均值/最小值寫入輸出表一次?

這種模式重複了很多,我不是在尋找使用Sql的單處理器實現,它可以獲取平均分數和單個分數。

回答

2

這是可能的。你甚至不需要更多的步驟。 Map-Reduce可以在一個步驟中實現。您可以使用與其關聯的ItemReader和ItemWriter創建一個步驟。從Map-Reduce開始考慮ItemReader -ItemWriter對。您可以通過使用自定義閱讀器和書寫器來實現必要的效果。您的讀寫器實現Stream接口以保證Spring批處理可以保證中間StepContext保存操作,這可能是一個好主意。

我試過它只是爲了好玩,但我認爲這是毫無意義的,因爲您的工作能力受單個JVM限制,換句話說:您無法達到Hadoop集羣(或其他實地圖縮減實施)生產環境性能。隨着數據量的增長,它也很難被縮減。

不錯的觀察,但國際海事組織目前沒有用於現實世界的任務。

0

我覺得批處理框架應該將編程/配置和運行時問題分開。如果spring批處理提供了所有主要的批處理運行時間(如JVM,Hadoop集羣)的通用解決方案(也使用JVM )等

- >寫入使用整合了其他的編程模型,比如Spring批處理編程/配置模型批處理程序的map-reduce,傳統的Java等

- >根據您的需要選擇運行時間(單JVM或Hadoop集羣或NoSQL)。

Spring Data嘗試解決其中的一部分問題,爲各種類型的數據源提供統一的配置模型和API使用。

相關問題