gpt4 book ai didi

hadoop - Hadoop 中的线性滤波器 (FIR)(Hadoop in Action 练习)

转载 作者:行者123 更新时间:2023-12-02 20:14:24 25 4
gpt4 key购买 nike

Hadoop in Action 中的第 4 章练习 4 是关于实现一个线性过滤器来计算时间序列的移动平均值。也就是说,给定 N 和一系列带时间戳的值 a(t),计算 y,其中

y(t) = a(t)*1/N + a(t-1)*1/N + ... + a(t-N)*1/N.

我无法在 Mapreduce 中实现这一点。一个reducer 需要接收一起计算y 中的元素所需的N 条记录。即使这些记录是按时间顺序排列的,这 N 条记录也可能被拆分到两个映射器中。在 mapper 中发出什么样的 key 可以保证同一个 reducer 接收这 N 条记录?它们的时间戳都是不同的,因此不能用作键。

还是我完全偏离了我的方法?我会感谢提示。

最佳答案

从书上看问题,你有点错误地陈述了这个问题。

输入数据是一系列键/值 (t -> x(t)),其中 t 是时间,x(t) 是当时观察到的值。然后要随时计算移动平均线,请使用以下公式:

y(t) = a0 * x(t) + a1 * x(t-1) + a2 * x(t-2) + ... + aN * x(t-N)

其中 a0, a1, a2, ... aN 是已知常数。

为这个问题实现映射器的关键是识别所有包含特定 x 的 y(t) 方程并使用该方程作为键。这是通过观察时间参数 t 的模式来完成的。对于任何 x(t),x(t) 在 y(t) 中排在第一位。 x(t) 也是 y(t+1) 中的第二项,y(t+2) 中的第三项,依此类推,直到 y(t+N) 中的 (N+1) 个位置项。

因此,对于输入中的每个 (t -> x(t)) 键/值,映射器需要输出几个新的键/值对:
t   -> {a0, x(t)}
t+1 -> {a1, x(t)}
t+2 -> {a2, x(t)}
...
t+N -> {aN, x(t)}

映射器完成后,将有一组 {an, x(t)} 值,这些值由它们所属的 y(t) 方程键入。

在 reducer 方面,将传递特定 y(t) 的一组 {an, x(t)} 值,可以计算乘积的总和以产生 y(t) 值。

关于hadoop - Hadoop 中的线性滤波器 (FIR)(Hadoop in Action 练习),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com