簡體   English   中英

SpringBatch 中的 MapReduce/Aggregate 操作

[英]MapReduce/Aggregate operations in SpringBatch

是否可以在 SpringBatch 中進行 MapReduce 樣式的操作?

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

例如,假設我有一個龐大的學生成績數據庫。 第一步計算每門課程/考試的平均分數。 第二步將個人分數與平均分數進行比較,以根據一些簡單的規則確定成績:

  1. A 如果學生成績高於平均水平
  2. B 如果學生成績是平均
  3. C 如果學生成績低於平均水平

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

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

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

有可能的。 你甚至不需要超過一個步驟。 Map-Reduce 可以一步實現。 您可以創建一個與 ItemReader 和 ItemWriter 關聯的步驟。 將 ItemReader -ItemWriter 對視為 Map-Reduce。 您可以通過使用帶有適當行聚合的自定義讀取器和寫入器來實現必要的效果。 對於您的讀寫器來說,實現 Stream 接口以保證 Spring 批處理的中間 StepContext 保存操作可能是一個好主意。

我只是為了好玩而嘗試它,但我認為這是沒有意義的,因為你的工作能力受到單個 JVM 的限制,換句話說:你無法達到 Hadoop 集群(或其他真正的 Z1D78DC8ED51214E518B5114FE24490 降低生產環境的實現)生產環境。 此外,隨着數據大小的增長,將很難進行可擴展。

很好的觀察,但 IMO 目前對現實世界的任務無用。

我覺得批處理框架應該將編程/配置和運行時問題分開。如果 spring 批處理在所有主要批處理運行時間(如 JVM、Z53EB3DCFBB4C2109464FE1A985D7 等)上提供通用解決方案,那就太好了。

-> 使用 Spring 批量編程/配置 model 編寫批處理程序,集成了其他編程模型,如 map-reduce、傳統 java 等。

-> Select 根據您的需要運行時(單個 JVM 或 Hadoop 集群或 NoSQL)。

Spring 數據嘗試解決一部分,提供統一配置model 和 API 使用各種類型的數據源。)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM