web-dev-qa-db-fra.com

Fonction de hachage dans spark

J'essaie d'ajouter une colonne à une trame de données, qui contiendra le hachage d'une autre colonne .

J'ai trouvé cette documentation: https://spark.Apache.org/docs/2.3.0/api/sql/index.html#hash
Et j'ai essayé ceci:

import org.Apache.spark.sql.functions._
val df = spark.read.parquet(...)
val withHashedColumn = df.withColumn("hashed", hash($"my_column"))

Mais quelle est la fonction de hachage utilisée par cette hash()? Est-ce que murmur, sha, md5, Autre chose?

La valeur que j'obtiens dans cette colonne est un entier, donc la plage de valeurs ici est probablement [-2^(31) ... +2^(31-1)].
Puis-je obtenir une valeur longue ici? Puis-je obtenir un hachage de chaîne à la place?
Comment puis-je spécifier un algorithme de hachage concret pour cela?
Puis-je utiliser une fonction de hachage personnalisée?

6

C'est Murmur basé sur le code source.

  /**
   * Calculates the hash code of given columns, and returns the result as an int column.
   *
   * @group misc_funcs
   * @since 2.0.0
   */
  @scala.annotation.varargs
  def hash(cols: Column*): Column = withExpr {
    new Murmur3Hash(cols.map(_.expr))
  }
6
Will