【问题标题】:What hash algorithm is used in pyspark.sql.functions.hash?pyspark.sql.functions.hash 中使用了什么哈希算法?
【发布时间】:2021-04-11 04:37:35
【问题描述】:

我有一个关于 PySpark 哈希函数的简单问题。

我已经检查过,在 Scala 中,Spark 使用基于 Hash function in spark 的 murmur3hash。

我想知道 PySpark (https://spark.apache.org/docs/latest/api/python/_modules/pyspark/sql/functions.html#hash) 中的哈希函数究竟使用了什么算法。

有人能回答这个问题吗?我也想知道 PySpark 哈希函数中使用的算法的代码。

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql


    【解决方案1】:

    Pyspark 只是 Scala Spark 代码的包装器。我相信它使用与 Scala Spark 中相同的哈希函数。

    在您指向source code 的链接中,您可以看到它调用了sc._jvm.functions.hash,它本质上指向Scala 源代码中的等效函数(在“JVM”内部)。

    【讨论】:

    • 非常感谢您的回答。顺便说一句,我如何确认 'sc._jvm.functions.hash' 正在使用 murmur3 算法?
    • 这里是 Scala Spark 的源代码:github.com/apache/spark/blob/master/sql/core/src/main/scala/org/…_jvm 以某种复杂的方式指向 Scala 函数,因为它需要从 Python 出发,通过 py4j Java 网关进入 JVM,然后访问 Scala/Java 函数。
    【解决方案2】:

    请注意,在 PySpark 之外复制哈希值并非易事,至少在 python 中是这样。 PySpark 使用这种算法的实现,当库在 python 中运行时,它不会给出相同的结果。

    甚至 Scala 和 PySpark 的哈希算法也不能直接兼容。原因在https://stackoverflow.com/a/46472986/10999642中解释过

    所以如果python中的可重复性很重要,您可以使用python的内置哈希函数,如下所示:

    udf_hash = F.udf(lambda val: hash(val), T.LongType())
    df = df.withColumn("hash", udf_hash("<column name>"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 2016-10-22
      • 1970-01-01
      • 2016-06-23
      相关资源
      最近更新 更多