原文链接: https://blog.csdn.net/dkl12/article/details/81381151

    1. package com.soyuan.zhitu.app
    2. import org.apache.spark.sql.SparkSession
    3. /**
    4. * @author tangwx@soyuan.com.cn
    5. * @date 2019/10/30 20:31
    6. */
    7. object TestApp {
    8. def main(args: Array[String]): Unit = {
    9. val spark = SparkSession
    10. .builder()
    11. .getOrCreate()
    12. val userData = Array(("Leo", 16), ("Marry", 21), ("Jack", 14), ("Tom", 18))
    13. val userDF = spark.createDataFrame(userData).toDF("name", "age")
    14. // userDF.show
    15. userDF.createOrReplaceTempView("user")
    16. // spark.udf.register("strLen",(str:String) => str.length)
    17. // spark.sql("select name,strLen(name) as name_len from user").show
    18. // spark.udf.register("isAdult",isAdult _)
    19. import org.apache.spark.sql.functions._
    20. //注册自定义函数(通过匿名函数)
    21. val strLen = udf((str: String) => str.length())
    22. //注册自定义函数(通过实名函数)
    23. val udf_isAdult = udf(isAdult _)
    24. //val udf_isAdult = udf(isAdult(_:Int))
    25. userDF.withColumn("name_len",strLen(col("name")))
    26. .withColumn("isAdult",udf_isAdult(col("age")))
    27. .show
    28. userDF.select(
    29. col("*"),
    30. strLen(col("name")) as "name_len1",
    31. udf_isAdult(col("age")) as "isAdult1"
    32. ).show
    33. val newUdf = udf((str1:String,str2:String) => {
    34. if (str1 !=null && str2!=null) {
    35. str1.length+str2.length
    36. }else{
    37. -1
    38. }
    39. })
    40. // userDF.withColumn("newUdf",newUdf(col("name"),col("age")))
    41. // .withColumn("isAdult",udf_isAdult(col("age")))
    42. // .show
    43. userDF.select(
    44. col("*"),
    45. newUdf(col("name"),col("age"))
    46. ).show
    47. }
    48. /**
    49. * 根据年龄大小返回是否成年 成年:true,未成年:false
    50. */
    51. def isAdult(age: Int): Boolean = {
    52. if (age < 18) {
    53. false
    54. } else {
    55. true
    56. }
    57. }
    58. }