当前位置:首页 > 编程笔记 > 正文
已解决

数据处理生产环境_利用MurmurHash3算法在Spark和Scala中生成随机颜色

来自网友在路上 11138113提问 提问时间:2023-11-20 22:38:59阅读次数: 113

最佳答案 问答题库1138位专家为你答疑解惑

需求

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

输入数据

("吃饭", "123"),
("吃饭", "宋江"),
("郭靖", "宋江"),
("杨过", "奥特曼"),
("周芷若", "张无忌"),
("石破天", "谢逊"),
("赵敏", "张三丰"),
("小龙女", "杨过"),
("黄蓉", "郭靖"),
("洪七公", "欧阳锋")

Spark代码

package testimport org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
import scala.util.hashing.MurmurHash3object 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),//20231117lxh//https://blog.csdn.net/qq_52128187?type=blogval data = Seq(("吃饭", "123"),("吃饭", "宋江"),("郭靖", "宋江"),("杨过", "奥特曼"),("周芷若", "张无忌"),("石破天", "谢逊"),("赵敏", "张三丰"),("小龙女", "杨过"),("黄蓉", "郭靖"),("洪七公", "欧阳锋"))val df1 = data.toDF("a1", "a2")// 定义基于种子的随机颜色生成函数def getRandomColorFromSeed(seed: String): String = {val hashed = MurmurHash3.stringHash(seed) // 使用MurmurHash3生成种子的哈希值//https://blog.csdn.net/qq_52128187?type=blogval r = (hashed & 0xFF0000) >> 16val g = (hashed & 0x00FF00) >> 8val b = hashed & 0x0000FFf"#$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}
}

输出结果:

+----+-------+------+
|  a1|     a2|    c1|
+----+-------+------+
|吃饭|    123|#ff5e52|
|吃饭|   宋江|#cfac7d|
|郭靖|   宋江|#e0e0e0|
|杨过|奥特曼|#ff5e52|
|周芷若|张无忌|#ffb961|
|石破天|   谢逊|#1c6a77|
|赵敏|张三丰|#ff89a7|
|小龙女|   杨过|#ff5e52|
|黄蓉|   郭靖|#e0e0e0|
|洪七公|  欧阳锋|#1298d5|
+----+-------+------+

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

查看全文

99%的人还看了

相似问题

猜你感兴趣

版权申明

本文"数据处理生产环境_利用MurmurHash3算法在Spark和Scala中生成随机颜色":http://eshow365.cn/6-40660-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!