美文网首页
Spark SQL UDF(日期转换)

Spark SQL UDF(日期转换)

作者: hipeer | 来源:发表于2018-10-10 14:21 被阅读0次

  • 使用 Java API 获取日历对象

    // 到入需要的java类 
    import java.util.Calendar
    import java.text.SimpleDateFormat
    
    def getDate(date: String): Calendar = {
        val theDate = (new SimpleDateFormat("yyyy-MM-dd")).parse(date)
        val calendar = Calendar.getInstance()
        calendar.setTime(theDate)
        calendar
    }
    
  • 通过日期计算星期的函数

    // 第一种利用Canlender类
    def getDayOfWeek(date: String): Int = {
        val theDay = getDate(date).get(Calendar.DAY_OF_WEEK) - 1
        if (theDay == 0) 7 else theDay
    }
    
    // 第二种直接利用SimpleDateFormat类, 这个好一点
    def getDayOfWeek = (date: String) => (new SimpleDateFormat("u")).format(new SimpleDateFormat("yyyy-MM-dd").parse(date))
    
    // 注册函数
    spark.udf.register("dayOfWeek", (date: String) => getDayOfWeek(date))
    或
    import org.apache.spark.sql.functions.udf
    val day_Of_Week = udf((date: String) => getDayOfWeek(date))
    
    • 使用方式(假设有一个usersDF数据集):
    usersDF.createOrReplaceTempView("users")
    spark.sql("select dayOfWeek(joined_date) from users").show
    或
    usersDF.select(day_Of_Week($"joined_date")).show
    

    注:使用spark.udf.register()注册的方法只能在sql中用,在DataFrame API中不可用。第二种方式在DF API中能用,在SQL中不能用。

  • 计算月份的函数

    def getMonth(date: String): Int = setDate(date).get(Calendar.MONTH) + 1
    
    val month_Of_Year = udf((date: String) => getMonth(date))
    

    注:该函数在DataFrame API中使用,在sql中有date_format()函数可以直接用

相关文章

网友评论

      本文标题:Spark SQL UDF(日期转换)

      本文链接:https://www.haomeiwen.com/subject/phvyaftx.html