我使用的是sparkversion2.1,我有几个电话号码,我需要在scala中为相似的电话号码分配相同的随机数

ryoqjall  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(317)

我正在使用scala.util.random.shuffle(phonenumber.tolist)获取我所有电话号码的随机号码,但是我的电话号码列表中有重复的电话号码,我想为所有重复的电话号码分配相同的随机号码。
我已经在使用denserank()来整理那些重复的值。

abithluo

abithluo1#

你在找这个吗-

val getRandom = udf((seed: Long) => new Random(seed).shuffle(seed.toString.toCharArray.iterator).mkString("").toLong)
    Seq(123456, 234567, 345678, 123456, 456789, 123456, 123456, 123456).toDF("phone_number")
      .withColumn("rand_number", getRandom($"phone_number"))
      .show(false)

    /**
      * +------------+-----------+
      * |phone_number|rand_number|
      * +------------+-----------+
      * |123456      |512634     |
      * |234567      |372456     |
      * |345678      |847635     |
      * |123456      |512634     |
      * |456789      |789546     |
      * |123456      |512634     |
      * |123456      |512634     |
      * |123456      |512634     |
      * +------------+-----------+
      */

请注意重复电话号码的洗牌 123456 总是一样的。这可以看作是 shuffle Spark函数

相关问题