Spark_获取指定日期的所在月份的天数完整指南

开发背景

        前段时间有一个开发需求的一小块用到了这,是一个利用率的计算。规则是某id下的近半年的值的小时利用率。

        计算规则是某值除以近半年 天数以及24h,但是月份里面数据有空值,所以要计算一下id对应的月份的天数,并且过滤掉数据有空值的天数。然后在做计算。

        我这个人写博客,总喜欢交代一下背景,好提醒自己这块是哪块的业务知识。业务千变万化,逻辑倒是少得可怜。

        本文将介绍如何Spark框架来计算给定日期所在月份的天数,并将其应用于一个实际的数据集。使用DataFrame和UDF来实现

已下面的数据为例

      (1, "2024-01-01", 15),
      (1, "2024-02-02", 23),
      (1, "2024-03-03", 0),
      (2, "2024-01-01", 20),
      (2, "2024-01-02", 23),
      (2, "2024-08-05", 40)

话不多说,直接上代码

  代码:

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
import java.time.LocalDate
object CalculateDaysInMonth {
  def main(args: Array[String]): Unit = {

    // 创建SparkSession
    val spark = SparkSession.builder()
      .appName("CalculateDaysInMonth")
      .master("local[*]")
      .getOrCreate()

    import spark.implicits._

    val data = Seq(
      (1, "2024-01-01", 15),
      (1, "2024-02-01", 23),
      (1, "2024-05-01", 0),
      (2, "2024-06-01", 20),A
      (2, "2024-07-05", 23),
      (2, "2024-08-01", 40)
    ).toDF("id", "date", "value")

    // 获取id对应的月份天数
    val getMonthDays = udf((dateStr: String) => {
      LocalDate.parse(dateStr).lengthOfMonth()
    })

//    val result = data.withColumn("days_in_month", getMonthDays($"date"))
// when-otherwise表达式结合UDF来决定days_in_month的值
    val result = data.withColumn("days_in_month",
  when($"value" =!= 0, getMonthDays($"date")).otherwise(lit(0))
)

    //author:lixh  博客地址https://blog.csdn.net/qq_52128187?type=blog
    result.show()

    spark.stop()
  }
}

   逻辑就是上面的了,基本上简单易懂,上手快!

打印结果

得到这个结果我们就可以做后面的操作了,这是demo,比如说可以计算后续的操作了,over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值