需求

        根据给定的编号在这一列后面生成随机颜色_16

输入数据

("吃饭", "123"),

("吃饭", "宋江"),

("郭靖", "宋江"),

("杨过", "奥特曼"),

("周芷若", "张无忌"),

("石破天", "谢逊"),

("赵敏", "张三丰"),

("小龙女", "杨过"),

("黄蓉", "郭靖"),

("洪七公", "欧阳锋")

Spark代码

import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.functions._

import scala.util.hashing.MurmurHash3

object randomV2 {

def main(args: Array[String]): Unit = {

val spark = SparkSession.builder()

.appName("ColorGeneration")

.master("local[*]")

.getOrCreate()

import spark.implicits._

// 创建DataFrame使用提供的数据,这里是测试数据,

//生产环境中我们一般是读取的上一个节点传来的dataframe,直接调下面的方法,自定义函数即可,

//完全可以实现我们想要的功能,可根据我们的具体虚修再做修改

//val df = spark.read.csv("xxx.csv", header = true, inferSchema = true),

//20231117

//https://blog.csdn.net/qq_52128187?type=blog

val data = Seq(

("吃饭", "123"),

("吃饭", "宋江"),

("郭靖", "宋江"),

("杨过", "奥特曼"),

("周芷若", "张无忌"),

("石破天", "谢逊"),

("赵敏", "张三丰"),

("小龙女", "杨过"),

("黄蓉", "郭靖"),

("洪七公", "欧阳锋")

)

val df1 = data.toDF("a1", "a2")

// 定义基于种子的随机颜色生成函数

def getRandomColorFromSeed(seed: String): String = {

val hashed = MurmurHash3.stringHash(seed) // 使用MurmurHash3生成种子的哈希值

val r = (hashed & 0xFF0000) >> 16

val g = (hashed & 0x00FF00) >> 8

val b = hashed & 0x0000FF

f"#$r%02x$g%02x$b%02x"

}

val getRandomColorWithSeedUDF = udf((seed: String) => getRandomColorFromSeed(seed))

val dfWithColor = df1.withColumn("c1", getRandomColorWithSeedUDF($"a1"))

dfWithColor.show() // 显示包含使用相同随机种子生成的新 "c1" 列的 DataFrame //20231117lxh

}

}

输出结果:

这是其中一版,能基本实现我生产中的需求,还有第二版回头再补充吧

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: