簡體   English   中英

在 Scala 中生成隨機十六進制?

[英]Generate Random Hexidecimal in Scala?

如何在 scala 中生成隨機十六進制?

它的目的主要是將其用作 UDF,以在 DataFrame 中每列生成隨機的 64 個十六進制字符。

我知道可以在下面使用 Int 等:

val r = scala.util.Random
println(r.nextInt)

十六進制是否有等效或其他方法的簡單方法? 特別是 64 個字符? 例如) 6e89f0c4c8a86812ef594229e5f4d997cb38aadc8a694f1b3be24a543b7699de

由於Byte是 2 個十六進制數字,因此可以生成一個包含 32 個隨機字節的數組,將它們呈現為十六進制,然后將它們連接成一個字符串:

def randomHex256(): String = {
  val arr = Array[Byte](32)
  scala.util.Random.nextBytes(arr)
  // iterator avoids creating a strict intermediate collection
  arr.iterator.map(b => String.format("%02x", Byte.box(b))).mkString("")
}

下面是 base64 的示例代碼(Scala),其中十六進制生成的概念相似,區別如下所述:

base64 的開銷較小(base64 為原始數據的每 3 個字節生成 4 個字符,而十六進制為原始數據的每個字節生成 2 個字符)。

import java.util.Base64

def encodeToBase64String(bytes: Array[Byte]): String = Base64.getEncoder.encodeToString(bytes)

val dm_with_clsr_two =(inputString:String) => encodeToBase64String(inputString.getBytes("UTF-8"))
spark.udf.register("DATA_MASK_TWO", dm_with_clsr_two)
spark.sql("select id,DATA_MASK_TWO(id), gender, birthdate, maiden_name, lname, fname, address, city, state, zip, cc_number, DATA_MASK_TWO(cc_number), cc_cvc, cc_expiredate from sample_ssn_data").show(5,false)

+-----------+--------------------------------+------+----------+-----------+------+--------+--------------------+-----------+-----+-----+-------------------+--------------------------------+------+-------------+
|id         |UDF:DATA_MASK_ONE(id)           |gender|birthdate |maiden_name|lname |fname   |address             |city       |state|zip  |cc_number          |UDF:DATA_MASK_TWO(cc_number)    |cc_cvc|cc_expiredate|
+-----------+--------------------------------+------+----------+-----------+------+--------+--------------------+-----------+-----+-----+-------------------+--------------------------------+------+-------------+
|2022-25-005|4DDA8A5D35947B12B948EFF6EF14579A|m     |1958/04/21|Smooth     |White |John    |10932 California Rd |Calfornia creek |CA|94025|5270 2020 2022 5516|4F88DDF6489891710B9C5A5D8412129E|123   |2010/06/25   |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM