Spark:用户自定义函数(UDF)使用

Spark SQL支持用户自定义函数(UDF),我们可以方便的利用udf函数来完成各种数据处理操作。

下面例子展示了用UDF功能对一个数据集进行转换操作(将输入df的某列进行处理,将处理结果作为新列附加在新生成的df上):

var in = spark.createDataset(List(
  (1, 2),
  (3, 2),
  (3, 4),
  (3, 4),
  (1, 2)))
  .toDF("a", "b")
in.show
/*  +---+---+
    |  a|  b|
    +---+---+
    |  1|  2|
    |  3|  2|
    |  3|  4|
    |  3|  4|
    |  1|  2|
    +---+---+  */
val df = in.groupBy("a")
  .agg(collect_list("b").as("b"))
df.show
/*  +---+---------+
    |  a|        b|
    +---+---------+
    |  1|   [2, 2]|
    |  3|[2, 4, 4]|
    +---+---------+  */

def f(arr: Seq[Int]) = {
  (arr.sum * 1.0) / arr.size
} //自定义一个功能函数
val my_udf = udf(f _) //将自定义函数注册为udf
val out = df.withColumn("avg(b)", my_udf($"b")) //使用udf进行转换操作
out.show
/*  +---+---------+------------------+
    |  a|        b|            avg(b)|
    +---+---------+------------------+
    |  1|   [2, 2]|               2.0|
    |  3|[2, 4, 4]|3.3333333333333335|
    +---+---------+------------------+  */
posted @ 2019-01-04 17:25  xuejianbest  阅读(1514)  评论(0编辑  收藏  举报