HDPCD-Java-复习笔记(10)-lab

Java lab booklet


Computing the Moving Average of a Stock

仅展示部分代码,其余参考前一个复习笔记。

Reducer recycle logic's data example

window size:3, Symbol:Apple, Values:1.26, 3, 4

Apple [1.26]

Apple [1.26, 3], Apple [3]

Apple [1.26, 3, 4], Apple [3,4], Apple [4]


public static class MovingAverageReducer extends
			Reducer<Stock, DoubleWritable, Text, DoubleWritable> {
		private Text outputKey = new Text();
		private DoubleWritable outputValue = new DoubleWritable();
		private static final int WINDOW_SIZE = 50;
		private LinkedList<StockWindow> windows = new LinkedList<StockWindow>();

		@Override
		protected void reduce(Stock key, Iterable<DoubleWritable> values,
				Context context) throws IOException, InterruptedException {
			StockWindow stockWindow;
			for (DoubleWritable value : values) {
				windows.add(new StockWindow(key.getSymbol()));
				for (StockWindow window : windows) {
					window.addPrice(value.get(), key.getDate());
				}
				if (windows.size() >= WINDOW_SIZE) {
					stockWindow = windows.removeFirst();
					outputKey.set(stockWindow.toString());
					outputValue.set(stockWindow.getAverage());
					context.write(outputKey, outputValue);
				}
			}
			windows.clear();

		}
	}

package average;

import java.util.LinkedList;

public class StockWindow {
	private String symbol;
	private String endDate;
	private LinkedList<Double> prices = new LinkedList<Double>();
	

	public StockWindow(String symbol) {
		super();
		this.symbol = symbol;
	}

	public String getSymbol() {
		return symbol;
	}

	public String getEndDate() {
		return endDate;
	}

	public void addPrice(double price, String endDate) {
		prices.add(price);
		this.endDate = endDate;
	}
	
	public double getAverage() {
		double sum = 0.0;
		int count = 0;
		for(double price: prices) {
			count++;
			sum += price;
		}
		return sum/count;
	}
	
	public String toString() {
		return symbol + "," + endDate;
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值