因此,我在java中实现了分离链式哈希:https://github.com/big-data-analytics-project/static-hashing-closed/blob/main/static%20hashing%20closed下一步是使用spark部署它,我试着阅读教程,但还是迷路了。我该怎么做?
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,那么您就可以使用 hashid 在 spark.sql 我也是。
md
hashid
spark.sql
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
2条答案
按热度按时间rm5edbpk1#
您可以使用以下自定义项来实现此目标:
用于直接哈希值
md
在上面的def中,这个函数将返回从1到10000的值一旦您注册为spark udf,那么您就可以使用
hashid
在spark.sql
我也是。bcs8qyzn2#
一种可能是从哈希实现中创建一个jar,并在spark应用程序中注册为udf,如下所示:
之后,您可以通过sql表达式使用它,如下所示:
有用的链接:
从scala将udf注册到sqlcontext,以便在pyspark中使用
spark:如何用scala或java用户定义函数Mappython?
重要信息:您必须使用--jars在spark submit中定义jar