【问题标题】:Implementing Hashing with spark用 spark 实现散列
【发布时间】:2021-02-17 01:26:42
【问题描述】:

所以,我在 Java 中实现了单独的链式哈希:https://github.com/Big-data-analytics-project/Static-hashing-closed/blob/main/Static%20hashing%20closed

下一步是使用 spark 实现它,我尝试阅读教程,但仍然迷路。我该怎么做?

【问题讨论】:

    标签: java apache-spark indexing pyspark hashtable


    【解决方案1】:

    一种可能性是从您的散列实现创建一个 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")))
    

    有用的链接:

    Register UDF to SqlContext from Scala to use in PySpark

    Spark: How to map Python with Scala or Java User Defined Functions?

    重要的是,您必须使用 --jars 在 spark-submit 中定义您的 jar

    【讨论】:

    • 谢谢!目的是使用 spark 实现它,我不知道是否允许我重用我的散列实现
    【解决方案2】:

    您可以使用以下 UDF 来实现这一目标:

       #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,这个函数将返回从 1 到 10000 的值

    注册为 spark udf 后,您也可以在 spark.sql 中使用 hashid

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 1970-01-01
      • 2014-09-08
      • 2020-11-08
      • 2013-08-21
      • 1970-01-01
      • 2017-09-17
      • 2021-06-18
      • 2019-07-31
      相关资源
      最近更新 更多