Поскольку существует 600 М записей, он кажется достаточно большим, чтобы использовать базу данных (и не слишком большим, чтобы требовать распределенную базу данных).Таким образом, вы можете просто загрузить это в БД (MySQL, SQLServer, Oracle и т. Д.) И выполнить следующие запросы:
выбрать call_party, named_party, sum (call_duration), avg (call_duration), min (call_duration), max (call_duration), count (*) из группы call_log по call_party, порядок Call_party на 7 дес
Это было бы начало.
Далее, вы хотели бы запустить некоторый анализ ассоциации (возможно, используя Weka), или, возможно, вы захотите проанализировать эту информацию как кубы (возможно, используя Mondrian / OLAP).Если вы расскажете нам больше, мы поможем вам больше.
С точки зрения алгоритма, то, что БД делает внутренне, похоже на то, что вы делали бы сами программно:
- Сканирование каждой записи
- Найдите запись для каждой комбинации (Call_party, Call_party) и обновите ее статистику.
Хорошим способом хранения и поиска записей для (Call_party, Call_party) будет использование хэш-функциии найти соответствующую запись из корзины.
Хотя может быть заманчиво создать двумерный массив для (call_party, named_party), который будет очень разреженным массивом (очень расточительным)).