如何设置 ruby​​ murmur 哈希的种子值

发布于 2024-11-18 19:02:20 字数 296 浏览 3 评论 0原文

有没有办法设置使用 ruby​​ 哈希函数的种子值(即 1.9 中的 murmur 哈希,不知道 JRuby?),以便我每次运行脚本时都可以获得相同的哈希代码(即在多个并行上)进程或在不同的节点上),

这样就

可以将“这是一个测试”。

每当我运行这个时,今天、明天、三周后等,hash 都是相同的

我想这样做,这样我就可以并行实现 MinHash

我可以看到在murmur_hash gem 表示 murmur 哈希接受种子,因此我假设每当我选择相同的种子时,我都可以设置种子并确定性地获取哈希代码

Is there a way to set the seed value for using the ruby hash function (i.e. murmur hash in 1.9, don't know JRuby?) so that I can get the same hash code every time I run the script (i.e. in parallel on multiple processes or on different nodes)

so that

puts "this is a test".hash

is the same whenever I run this , today, tomorrow, 3 weeks from now, etc

I want to do this so I can implement MinHash in parallel

I can see in the murmur_hash gem that the murmur hash accept a seed so I assume I can set the seed and get the hash code deterministically whenever I choose the same seed

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

江挽川 2024-11-25 19:02:20

尝试这个种子 0xbc9f1d34,来自 jeff Dean 的 LevelDB 源代码,:)

try this seed 0xbc9f1d34, from jeff dean's LevelDB source code, :)

沩ん囻菔务 2024-11-25 19:02:20

如果有人想知道,请恢复此内容...

您可以使用 murmurhash3 gem 位于此处

您可以覆盖 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,那么您应该在任何服务器、进程、线程上重复获得相同的哈希值。

并行中的 MurmurHash

您可以 parallel gem 位于此处

然后只需传递项目列表你想并行执行/散列。

items_to_hash = ['val0', 'val1',...., 'valN']
results = Parallel.map(items_to_hash) do |item|
   item.hash
end

如果您不喜欢使用另一个 gem 并行执行哈希,那么这里有一个使用 vanilla Ruby 的示例来帮助您。
http://taw.blogspot.com/2010/05 /very-simple-parallelization-with-ruby.html

Reviving this if anyones wants to know...

You can use the murmurhash3 gem located here.

You can override the hash function built into String class.

require 'murmurhash3'
class String

  SEED = 12345678

  def hash
    MurmurHash3::V32.str_hash(self,SEED)
  end
end

No you can use this hash function on any string.

$ irb
2.1.1 :001 > "this is a test".hash
=> 553036434 

Assuming you use the same seed 12345678, then you should repeatedly get the same hash on any server, process, thread.

MurmurHash in Parallel

You can parallel gem located here

Then simply pass the list of items you want to be executed/hashed in parallel.

items_to_hash = ['val0', 'val1',...., 'valN']
results = Parallel.map(items_to_hash) do |item|
   item.hash
end

If you not into using another gem to execute the hashes in parallel, then here is an example to use vanilla Ruby to get you going.
http://t-a-w.blogspot.com/2010/05/very-simple-parallelization-with-ruby.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文