toDF().coalesce(1).write.mode(SaveMode.Append).insertInto("dwd.dwd_member_regtype")
- 使用insertInto时,要插入的数据顺序必须和已经简历好的表的字段顺序一样
- saveAsTable没有上述要求,但是他不兼容hive,使用时,会删掉重新建
sparksql中有 first函数,而hive没有
拉链表制作过程:
- 查询出历史数据 --> as[case class]
- 查询出新增及变化数据 --> as[case class]
- 两个 case class 进行 union
- 按照 uid 进行groupByKey ==> 返回一个 KeyValueGroupDataSet (spark2.0之后才有,DataSet没有 reduceByKey)
- 判断每个uid下对应的集合的数量是不是大于1 且 倒数第二条的结束时间是不是 9999-99-99.
- 将修改好的拉链表 overwrite 到历史拉链表
spark中的DataFrame中没有 外联join,源码如下:
case "inner" => Inner
case "outer" | "full" | "fullouter" => FullOuter
case "leftouter" | "left" => LeftOuter
case "rightouter" | "right" => RightOuter
case "leftsemi" => LeftSemi
case "leftanti" => LeftAnti
case "cross" => Cross
spark中的DataFrame有两种join形式:
- Seq() 可以达到去重的效果
dwdMember.join(dwdMemberRegtype, Seq("uid", "dn"), "left")
dwdMember.join(dwdMemberRegtype,dwdMember("uid")===dwdMemberRegtype("uid") && dwdMember("dn")===dwdMemberRegtype("dn"),"left")