Какую структуру данных использовать в больших значениях?
Я пишу программу в Mapreduce. Мне нужно сохранить большое значение для каждого ключа. Подробно для каждого идентификатора (ключа) я хочу сохранить значение, состоящее из больших чисел. Я использовал цифры от 1 до 100000000. например:
id value
1 1,3,9,23,56,345,.......,10000000000
2 6,8,45,321,876,.........,98760000876
.
.
.
100000000 1,2,6.83,90,126,567,.......,7632786765643
На каждой итерации количество чисел в каждом значении увеличивается. Во-первых, я выбираю Text type для value, но в результате я увидел, что размер shuffle стал очень большим, и я не смог получить ответ. Тогда я выбрал BitSet
Тип, но процесс BitSet был очень медленным. Я не знаю, какую структуру данных я могу использовать, которая может предоставить мне размер и скорость процесса. Кто-нибудь может помочь? Благодарю.
2 ответа
Я думаю, что вы можете связать List
для каждого ключа. Таким образом, вы можете использовать Map
который связывает идентификатор с списком номеров: Map<Integer, List<Long>>
В Java тип данных int представляет собой 32-разрядное целое число со знаком. Он имеет диапазон от -2 147 483 648 до 2 147 483 647, что недостаточно в вашем случае. Если у вас 64-битный компьютер, вы можете использовать тип int.
В противном случае вы можете использовать BigInteger
для меня подходящей структурой данных является:
Map<Integer, List<BigInteger>>