Spark Core自定义UDF函数之显示日期

这篇博客展示了如何使用Spark SQL进行数据处理。通过读取`order_items`和`orders`表,作者首先对订单数量进行了汇总,并通过自定义的UDF函数将订单日期转换为星期几。最后,通过内连接操作合并了两个表,并删除了无关列,显示了每个订单日期对应的星期。

orderitem表:

 orders表:

这里我们先连接 然后增加一列字段 让这列显示的是该行日期的周几

object Exp001 {
  val calcWeek = udf({
    (times:String)=>{
      val reg="""([0-9]{4}-[0-9]{2}-[0-9]{2}) .*""".r//先正则提取出来日期
      val iter=reg.findAllMatchIn(times).toList
      var dt=LocalDate.parse(iter(0).group(1))//利用java的LocalDate解析日期字符串
      dt.getDayOfWeek().name()//可以获取到具体星期几
    }
  })
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().master("local[*]")
      .appName("loaddata").getOrCreate()
    import spark.implicits._
    val orderItem=spark.read.csv("file:///d:/sc/order_items.csv")
      .toDF("itemid","ordid","proid","buynum","cntprice","price")

  orderItem.groupBy("ordid")
      .agg(sum($"buynum".cast(IntegerType)).as("buy_cnt"))
      .join(orders,Seq("ordid"),"inner").drop("userid","ordstatu")
      .withColumn("week",calcWeek($"orddate")).show()
 }
}

显示效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后季暖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值