用spark实现哈希

brgchamk  于 2021-05-18  发布在  Spark
关注(0)|答案(2)|浏览(625)

因此,我在java中实现了分离链式哈希:https://github.com/big-data-analytics-project/static-hashing-closed/blob/main/static%20hashing%20closed
下一步是使用spark部署它,我试着阅读教程,但还是迷路了。我该怎么做?

rm5edbpk

rm5edbpk1#

您可以使用以下自定义项来实现此目标:


# 1.define hash id calculation UDF

    def calculate_hashidUDF = udf((uid: String) => {
      val md = java.security.MessageDigest.getInstance("SHA-1")
      new BigInteger( DatatypeConverter.printHexBinary(md.digest(uid.getBytes)), 16).mod(BigInteger.valueOf(10000))
    })
    #2.register hash id calculation UDF as spark sql function
    spark.udf.register("hashid", calculate_hashidUDF)

用于直接哈希值 md 在上面的def中,这个函数将返回从1到10000的值
一旦您注册为spark udf,那么您就可以使用 hashidspark.sql 我也是。

bcs8qyzn

bcs8qyzn2#

一种可能是从哈希实现中创建一个jar,并在spark应用程序中注册为udf,如下所示:

spark.udf.registerJavaFunction("udf_hash", "function_name_inside_jar", <returnType e.g: StringType()>)

之后,您可以通过sql表达式使用它,如下所示:

df = df.withColumn("hashed_column", expr("udf_hash({})".format("column")))

有用的链接:
从scala将udf注册到sqlcontext,以便在pyspark中使用
spark:如何用scala或java用户定义函数Mappython?
重要信息:您必须使用--jars在spark submit中定义jar

相关问题