2017-01-17 8 views
1

У меня есть ситуация, когда у нас есть несколько распределенных серверов, содержащих большие наборы данных в файлах журналов. Мне нужно вычислить среднее значение (среднее значение), но данные слишком велики, чтобы привести все данные на один сервер и вычислить среднее значение. Как вычислить среднее значение, когда данные находятся на всех этих серверах?Как найти среднее число номеров, распространяемых на нескольких серверах?

Один из способов, которым я думал, заключался в том, чтобы каждый сервер вычислил (1) сумму своих собственных значений и (2) количество значений. Эта информация может быть получена на одном сервере, и тогда я мог бы вычислить среднее как:

mean = sum(sum values)/sum(count values)

Однако, я мог бы переполнение. Думаю, я мог бы использовать класс BigDecimal Java для обработки всех суммированных значений?

Спасибо за любую помощь.

+0

Как насчет средневзвешенного значения двух средств? – samgak

+0

Чтобы избежать переполнения, вы можете разделить каждое число на количество значений. Фактически для значений 'n'' a1' to 'an' вы можете добавить' a1/n + a2/n + ... + an/n' –

+1

i был передан курс интеллектуального анализа данных, наш учитель сказал нам для вычисления среднего значения для огромное количество чисел, нам просто нужно иметь переменную 'count' и среднее значение, для каждого нового элемента мы должны обновить среднее значение следующим образом:' mean = ((mean * count) + element)/(++ count) ' –

ответ

0

Существует множество решений в соответствии с тем, что вы предложили. Вместо того, чтобы передавать сумму и счет, возможно, вы можете отправить локальное значение и счет.

BigDecimal Java должен быть достаточным для большинства случаев использования.