gpt4 book ai didi

apache-spark - Hive vs Spark Hash 函数产生不同的结果

转载 作者:行者123 更新时间:2023-12-04 05:00:01 29 4
gpt4 key购买 nike

我有两份工作完全一样。一个在 Hive 中,另一个在 Spark 中。结果的唯一区别是其中一列是经过哈希处理的字符串。因此,在调用 hash() 时,hive 和 Spark 中的结果是不同的。

我知道使用了不同的库。但我想知道(如果可能的话)如何配置 Spark 以产生与 hive 中相同的结果?

是否可以找出哈希函数(例如 murmur3)并在两个引擎中使用它?

也许可以创建一个 Spark udf 来产生与 hive hash() 函数相同的结果?

最佳答案

我也遇到了同样的问题。我能找到的是 hive 中的哈希使用 java 函数:

Reproduce hive hash function in Python

另一方面,这是哈希函数在 spark 中的实现:

def hash(*cols):
"""Calculates the hash code of given columns, and returns the result as an int column.

>>> spark.createDataFrame([('ABC',)], ['a']).select(hash('a').alias('hash')).collect()
[Row(hash=-757602832)]
"""
sc = SparkContext._active_spark_context
jc = sc._jvm.functions.hash(_to_seq(sc, cols, _to_java_column))
return Column(jc)

但是 laso spark 实现是基于 hashCode 的。 hashCode 的问题在于它不是确定性的,这意味着它依赖于使用它的 JVM 和系统。由于这个原因,虽然实现可能是正确的,但在 hive 和 spark 中散列的两个字符串可能会给出不同的结果。

Java, Object.hashCode() result constant across all JVMs/Systems?

关于apache-spark - Hive vs Spark Hash 函数产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47414118/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com