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()
}
}
显示效果:

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

277

被折叠的 条评论
为什么被折叠?



