MurmurHash3 - Java и Python возвращают разные результаты при длинном вводе - PullRequest
0 голосов
/ 21 ноября 2018

Я использую Java-версию MurMurHash3, разработанную Google (google.common.hash.HashFunction и google.common.hash.Hashing), для создания n независимых хеш-функций (с использованием n различные семена), чтобы хэшировать ID как долго.Вот фрагмент кода:

    for(int i=0; i<seeds.length;i++){
        signature[i] =  hash(id, seeds[i]);
    }

    private long hash(int id, int seed){
        HashFunction hf = Hashing.murmur3_128(seed);
        long signature = hf.hashLong((long)id).asLong();

Я попытался повторить вышеупомянутый код в Python 2.7, используя mmh3 (https://pypi.org/project/mmh3/), но версия Python принимает только строки в качестве входных данных (или NumPy int) и использование одного и того же начального числа возвращает другой результат. Вот фрагмент кода:

def create_signature(self, id):
    v = np.int64(id)
    signature = []
    for i in range(len(self.__seeds)):
        h = mmh3.hash128(v, self.__seeds[i], signed=True)
        signature.append(h)
    return signature

Применение библиотеки mmh3 к набору различных идентификаторов, также есть много коллизий (нет коллизий с версией Javaвместо этого.) Есть ли способ получить те же результаты версии Java с Python?

...