1.定义udf
// 累加 map 中所有 key 小于 maxKey 的项
def accumulateMapValues(map: Map[String, Double], maxKey: String): Double = map.filter(kv => maxKey >= kv._1).values.sum
2.注册给api使用
def accumulateMapValuesUdf: UserDefinedFunction = udf(accumulateMapValues _)
df.withColumn("value_map", map_from_entries(collect_list(struct($"name", $"count")).over(Window.partitionBy("project_id"))))
//累计人数
.withColumn("accumulate", accumulateMapValuesUdf($"value_map", $"level"))
3.注册给spark sql 使用
SPARK.udf.register("sumWithMap", accumulateMapValues _)
SPARK.sql("select sunWithMap(value_map,level) from view")