需求
根据给定的轨迹编号在这一列后面生成随机颜色_16
代码
- package test
-
- 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),
-
- val data = Seq(
- ("吃饭", "睡觉"),
- ("吃饭", "宋江"),
- ("郭靖", "宋江"),
- ("杨过", "奥特曼")
- )
- 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
- }
- }