scala Md5加密

import java.security.MessageDigest
object Md5 {
    def hashMD5(content: String): String = {
      val md5 = MessageDigest.getInstance("MD5")
      val encoded = md5.digest((content).getBytes)
      encoded.map("%02x".format(_)).mkString
    }
 
    def main(args: Array[String]) { 
        println(hashMD5("abcdefg"))
        println(hashMD5("abcde"))
    }
 
}

第二行是对content进行加密

第三行是对加密后的数据,每一个字节转化成十六进制输出,一个字节8位,相当于2个16进制,因此不足2位的前面补0。

 

### 如何在 Spark SQL 中使用 MD5 函数 在 Spark SQL 中,`MD5` 是一种用于计算字符串哈希值的内置函数。它接受一个字符串类型的参数并返回其对应的 MD5 哈希值(以十六进制表示)。以下是关于 `MD5` 的具体用法以及一些实际案例。 #### 使用方法 可以通过调用 `org.apache.spark.sql.functions.md5(column)` 或者直接在 SQL 查询中使用 `MD5()` 来实现对指定列数据的加密处理[^3]。 #### 示例代码 下面展示了一个完整的例子来说明如何利用 `MD5` 对表中的某些字段进行哈希运算: ```scala import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions._ val spark = SparkSession.builder() .appName("MD5 Example") .master("local[*]") .getOrCreate() // 创建样例 DataFrame val data = Seq( ("Alice", 20), ("Bob", None), (null, 30) ).toDF("name", "age") data.createOrReplaceTempView("people") // 应用 MD5 函数到 name 和 age 列上 val resultDf = spark.sql(""" SELECT name, age, MD5(name) as hashed_name, CASE WHEN age IS NOT NULL THEN MD5(age.toString()) ELSE null END as hashed_age FROM people """) resultDf.show(false) spark.stop() ``` 此脚本创建了一个简单的 DataFrame 并对其部分列应用了 MD5 转换操作。注意对于可能为空的情况进行了特殊处理以避免错误发生[^3]。 另外,在复杂场景下也可以结合其他表达式一起构建更强大的逻辑判断条件。比如通过比较不同日期分区间的记录变化情况时可以采用如下方式生成唯一标识符以便后续分析对比[^3]: ```sql WITH t1 AS ( SELECT id AS pk, MD5(CONCAT(IFNULL(CAST(id AS STRING), '+'), IFNULL(name, '+'), IFNULL(CAST(age AS STRING), '+'))) AS md FROM dwd1.test_update_delete WHERE pday = DATE_FORMAT(DATE_SUB(CURRENT_DATE(), 1), 'yyyyMMdd') ), t2 AS ( SELECT id AS pk, MD5(CONCAT(IFNULL(CAST(id AS STRING), '+'), IFNULL(name, '+'), IFNULL(CAST(age AS STRING), '+'))) AS md FROM dwd1.test_update_delete WHERE pday = DATE_FORMAT(DATE_SUB(CURRENT_DATE(), 2), 'yyyyMMdd') ) SELECT COALESCE(t1.pk,t2.pk) AS key_col, IFF(t1.md <=> t2.md,'Unchanged','Changed') status_flag FROM t1 FULL OUTER JOIN t2 USING(pk); ``` 以上查询语句展示了如何基于两个时间窗口的数据集构造出差异检测机制,并标记每条记录的状态信息是否发生变化。 #### 注意事项 - 当输入为 NULL 时,`MD5(NULL)` 将会得到的结果也是 NULL。 - 如果需要将多个字段组合成单一键值,则应考虑它们各自的类型转换问题,确保最终拼接后的字符串形式一致且可预期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值