如何在R语言中获取xxhash64的64位整数值?
在R中获取xxhash64的integer64类型值
问题原因
之前通过as.numeric转换十六进制字符串的方式会失效,核心原因是:R的numeric类型是双精度浮点数,最多只能精确存储53位整数,而xxhash64生成的是64位哈希值,超出范围后会出现精度丢失或溢出,最终导致转成integer64时返回NA。
解决方案
直接将带0x前缀的十六进制字符串传给bit64::as.integer64(),绕过中间的numeric转换步骤,让函数直接解析64位十六进制值,避免精度丢失问题。
示例代码
library(digest) library(bit64) # 生成目标字符串的xxhash64十六进制结果 hash_hex <- digest("foo", algo = "xxhash64") # 转换为integer64类型 hash_int64 <- as.integer64(paste0("0x", hash_hex)) # 查看结果 print(hash_int64) # 输出:integer64 [1] 2904109676975075531 # 测试之前报错的"barfoo" hash_hex_barfoo <- digest("barfoo", algo = "xxhash64") hash_int64_barfoo <- as.integer64(paste0("0x", hash_hex_barfoo)) print(hash_int64_barfoo) # 输出:integer64 [1] 9300660110621736621
一致性验证
上述方法生成的integer64值可以和PySpark的pyspark.sql.functions.xxhash64结果完全对齐,比如对"foo"的计算结果,两边的64位整数值完全一致。
内容的提问来源于stack exchange,提问作者Jozef
相关产品推荐
相关产品推荐

