有没有办法设置使用ruby哈希函数的种子值(即1.9中的murmur哈希,不知道JRuby?)这样我每次运行脚本时都可以得到相同的哈希码(即多个进程或不同节点上的并行)
这样
将“这是一个测试”.hash
每当我运行这个,今天,明天,从现在开始的3周后,都是一样的
我想这样做,所以我可以并行实现MinHash
我可以在murmur_hash gem中看到murmur hash接受种子所以我假设我可以设置种子并在我选择相同的种子时确定性地获取哈希码
答案 0 :(得分:2)
尝试这个种子0xbc9f1d34,来自jeff dean的LevelDB源代码,:))
答案 1 :(得分:0)
如果任何人想知道的话,恢复这个......
您可以使用murmurhash3
gem located here。
您可以覆盖String
类中内置的哈希函数。
require 'murmurhash3'
class String
SEED = 12345678
def hash
MurmurHash3::V32.str_hash(self,SEED)
end
end
不能在任何字符串上使用此哈希函数。
$ irb
2.1.1 :001 > "this is a test".hash
=> 553036434
假设您使用相同的种子 12345678
,那么您应该在任何服务器,进程,线程上重复获取相同的哈希值。
您可以parallel
gem located here
然后简单地传递要并行执行/散列的项目列表。
items_to_hash = ['val0', 'val1',...., 'valN']
results = Parallel.map(items_to_hash) do |item|
item.hash
end
如果你没有使用另一个gem来并行执行哈希,那么这里有一个使用vanilla Ruby来让你前进的例子。
http://t-a-w.blogspot.com/2010/05/very-simple-parallelization-with-ruby.html