
368 12 章 ビッグデータ:スケールを追求
い。メ
モリはある程度なら使えるが、大量のレコードを格納できるほどの容量はない。個々の要素にアク
セスしたときに、その要素に何をするかを判断する必要がある。処理が終わったら要素は消えてしまうか
らだ。
例えば、一連の数値が通り過ぎていく過程で、それらの平均値を計算したいとする。これは難しい問題で
はない。それまでの値の合計を表す s とそれまでに観測した要素の数を表す n の 2 つの変数があればよい。
新しい要素 a
i
を観測するたびに、その値を s に加え、n を増やす。ストリーム A の現在の平均 µ =
¯
A が必
要になったら、s/n の値を返せばよい。
では、ストリームの分散や標準偏差の計算はどうすればよいだろうか。こちらの方が難しそうに見える。
次の式を思い出そう。
V (A) = σ
2
=
n
X
i=1
(a
i
−
¯
A)
2
n − 1
問題
は、数列の平均
¯
A は、ストリームの末尾に達するまでわからないことである。そして、末尾に達した
ときには、平均との差を計算すべきもともとの要素は失われている。
しかし、すべてが失われるわけではない。分散には、2 乗の平均から平均の 2 乗を引くというもう 1 つの
公式があることを思い出そう。
n − 1
n
V (A) =
1
n
n
X
i=1
(a
i
)
2
!
− (
¯
A)
2
これを使えば、n
, s に加えてそれまでの要素の 2 乗の総和を管理することにより、オンデマンドで分散を計
算するために必要な材料がすべて揃う。
ストリーミングモデルのもとでは正確に計算できない数値はたくさんある。例えば、長いシーケンスの ...