我有两个相同的工作,一个在Hive
中,另一个在Spark
中。唯一不同的是结果中的一列是被哈希过的字符串。因此,在调用hash()
时,hive和Spark的结果不同。
我知道使用了不同的库,但我想知道(如果可能的话)如何配置Spark以产生与Hive相同的结果?
是否可以找出哈希函数(例如murmur3
)并在两个引擎中使用它?
也许可以创建一个Spark udf
来产生与hive hash()
函数相同的结果?
我有两个相同的工作,一个在Hive
中,另一个在Spark
中。唯一不同的是结果中的一列是被哈希过的字符串。因此,在调用hash()
时,hive和Spark的结果不同。
我知道使用了不同的库,但我想知道(如果可能的话)如何配置Spark以产生与Hive相同的结果?
是否可以找出哈希函数(例如murmur3
)并在两个引擎中使用它?
也许可以创建一个Spark udf
来产生与hive hash()
函数相同的结果?
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)