问题标签 [murmurhash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hash - Cassandra,优化 in 子句
我正在考虑一种优化子句的方法,例如(1,2,3,....)中的 id?
- 掌握 Murmur3Partitioner 散列函数
- 按产生相同散列的值分组 in-clause,例如“id in (x1, x3, ...)”,其中 x1 和 x3 具有相同的散列。
- 将该查询传递给驱动程序,驱动程序应该能够转到分区所有者节点吗?
那么,如何获取 Cassandra 的 Murmur3Partitioner 散列函数,以便计算代码中的散列值?
这个理论适用于 Cassandra 吗?
python - 使用 Python 3 获取文件的杂音哈希
python 库 Murmur的文档有点稀疏。
我一直在尝试从这个答案中调整代码:
根据我在答案中读到的内容,md5 不能一次对整个文件进行操作,所以它需要这个循环。但是,不确定在线上会发生什么d.update(buf)
。
中的公共方法hashlib.md5()
是:
而mmh3
有
没有update
或hexdigest
方法..
有谁知道如何达到类似的结果?
动机是尽可能快地测试唯一性,这里的结果表明杂音是一个很好的候选者。
更新 -
根据@Bakuriu 的评论,我查看了mmh3似乎有更好的文档记录。
它里面的公共方法是:
..所以没有“更新”方法。我查看了源代码,mmh3.hash_from_buffer
但它看起来不像包含循环,而且它也不在 Python 中,无法真正遵循它。这是该行的链接
因此,现在只使用 CRC-32,它应该几乎与此目的一样好,并且有据可查如何做到这一点。如果有人发布解决方案,将对其进行测试。
python - Redshift UDF 中 murmur2 包的导入失败
我正在尝试将 murmur2 包作为库导入 Redshift 数据库。我做了以下步骤
运行模块打包程序
$ ./installPipModuleAsRedshiftLibrary.sh -m murmur2 -s s3://path/to/murmur2/lib
在 redshift 上创建库
CREATE OR REPLACE LIBRARY murmur2 LANGUAGE plpythonu from 's3://path/to/murmur2/lib/murmur2.zip' WITH CREDENTIALS AS 'aws_access_key_id=AAAAAAAAAAAAAAAAAAAA;aws_secret_access_key=SSSSSSSSSSSSSSSSS' region 'us-east-1';
创建函数和查询
create OR REPLACE function f_py_kafka_partitioner (s varchar, ps int)
returns int stable as $$ import murmur2
m2 = murmur2.murmur64a(s, len(s), 0x9747b28c)
return m2 % ps
$$ language plpythonu;
SELECT f_py_kafka_partitioner('jiimit', 100);
这会产生以下错误:
这是 svl_udf_log 的内容
python - 在 Pandas 数据帧上应用 scikit-learn murmurhash3_32
我尝试在熊猫数据框上应用 murmurhash。我想使用 scikit-learn murmurhash3_32(任何其他简单的提议都会受到赞赏)。我试过了
但我明白了
TypeError: ("key 0 100\n1 1000\nName: a, dtype: int32 with type class 'pandas.core.series.Series' 不支持。需要显式转换为字节", '发生在索引 a')
但 Scikit 应该处理 int32: https ://scikit-learn.org/dev/modules/generated/sklearn.utils.murmurhash3_32.html#sklearn.utils.murmurhash3_32
有什么想法或建议吗?
java - MurmurHash3 - Java 和 Python 在长输入时返回不同的结果
我正在使用由 Google 开发的 Java 版本的 MurMurHash3(google.common.hash.HashFunction 和 google.common.hash.Hashing)来创建n 个独立的散列函数(使用n 个不同的种子)来散列一个 ID。这是代码片段:
我尝试使用 mmh3(https://pypi.org/project/mmh3/)在 Python 2.7 中复制上述代码,但 Python 版本仅接受字符串作为输入(或 NumPy int)并使用相同的种子返回不同的结果。这是代码片段:
在一组不同的 ID 上应用 mmh3 库,也有很多冲突(与 Java 版本没有冲突)。有没有办法用 Python 获得相同的 Java 版本结果?
python - R 和 Python 的特征散列似乎给出了不同的结果
我正在使用特征散列将字符串变量转换为散列以进行分类。经过一番挖掘,我注意到尽管 MurmurHash3 特征哈希的 R 和 Python 实现(R:FeatureHashing:hashed.model.matrix 和 Python:sklearn.feature_extraction.FeatureHasher),但结果在特征放置位置方面是不同的。我认为 MurmurHash 应该是确定性的,因为当您在同一系统上运行相同的操作时,您会得到相同的结果哈希。但是,在实现之间可能存在种子问题?这给我带来了一个问题,因为我的分类模型(xgboost,我意识到 R 和 Python 之间存在问题)可能在相同数据上产生不同的结果,正如其他人所指出的那样。但是,我似乎已经弄清楚了那部分。
以下是 R 中的代码示例:
如您所见,R 将“A_C”放在第五列,将“B_D”放在第 12 列。这些情况始终如一地发生。现在让我们在 Python 中运行等效的代码。请注意,在 Python 中有多种输入特征散列的方法,作为 dict 或作为列表的列表。我尝试了几个,他们给了我相同的结果。
在这里,“A_C”和“B_D”不仅映射到与以前不同的索引,而且都映射到同一列。这意味着这个特征发生了冲突,因为值 1 代表不同的特征已经无法区分,这会降低分类器的能力。
我在这里有什么明显的遗漏吗?例如,我看到了这篇文章:Murmur3 hash different result between Python and Java implementation,但我对此知之甚少。我注意到的一件事是,在 R 中,如果您使用 create.mapping 选项然后运行
当它打印出来时,它会在字符串之前放置一个“x”(变量名),所以我认为这可能是导致问题的原因。但后来我尝试重新运行上面的 Python 代码,除了
但是虽然我得到了与以前不同的结果,但它与 R 的映射不匹配。也许这是 Python 存储变量名的内在因素?在此先感谢,我真的很想弄清楚这一点。
json - 使用 Murmur3 哈希作为数据库主键的优缺点
我正在创建数据库,有多个表,例如Apps, Space, Builds, Processes
.
我要使用这个数据库的应用程序就像一个用于平台监控的实时仪表板,数据库每秒都会更新新信息。
每当收到新信息时,apps_guid 都会重复行,这就是我不能使用 apps_guid 作为主键的原因。
我打算在这些表中使用 Murmur3 哈希作为主键并用于检查重复项。
我知道 Cassandra 使用它作为主键,但不确定它将如何在关系数据库中执行,这是个好主意吗?你有更好的建议吗?
应用栏:
c - MurmurHash32 和 static_cast 之间是否有任何质量差异(杂音哈希128)?
给定一条消息,MurmurHash3可以产生一个 32 位或 128 位的哈希结果。
output_v32_a
在上面的伪代码中,和之间是否存在质量差异output_v32_b
?
java - 不同语言版本的 Murmurhash 得到不同的结果
我在 java(jedis 和 guava)、go 和 python 中尝试了三个版本的 murmurhash。java(guava)、go 和 python 版本的结果输出相同的哈希码,但与 java(jedis) 不同。所有 murmurhash 代码如下所示。我对结果感到困惑。我已经看到了这个问题并Long.reverseBytes
在 java 中使用,但与其他人仍然不同。那么我应该怎么做才能使 murmurhash 的所有输出保持不变。谢谢~
1.java版(绝地)
java gradlecompile group: 'redis.clients', name: 'jedis', version: '3.1.0'
输出:
2.golang版本
输出:
3.python版
pip install mmh3
输出:
4.java(番石榴)
java gradlecompile group: 'com.google.guava', name: 'guava', version: '28.0-jre'
输出:
c++ - 使用 Murmur2 64 位哈希函数生成会导致冲突的输入
我被困在一项任务中,该任务包括找到一个漏洞,该漏洞只是在一个循环std::unordered_set
中插入一些字符串:unordered_set<string>
有关详细信息,请参阅完整的源代码。
在 UBUNTU 上编译的文件如下:
任务是提供一个输入,使该程序返回一个非零状态码。
任何想法在哪里看?提示是默认散列函数存在一些问题,并且程序是在 ubuntu 上编译的。