spark自定义函数udf案例

spark | 2021-05-13 09:28:26

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")

 

登录后即可回复 登录 | 注册
    
关注编程学问公众号