Spark.sql 列转行方法之stack函数用法
一个小需求:在hive表中取每个客户近6个月月底的三个字段:cust_id(客户id)、par_dt(分区时间)、money(金额),若客户只有近3个月的记录,则需要另外补充数据,金额为0。
因为spark中df只能增加列,而不能增加行记录,故补充默认值需要进行列转行,使用stack内置函数。
好,废话不多说,进行代码Demo演示。
Object TestDev extends LazyLogging{
def main(args: Array[String]):Unit = {
val spark = SparkSession
.builder()
.appName("test_Dev")
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.enableHiveSupport()
.getOrCreate()
//添加隐式转换
import spark.implicits._
//使用序列创建一个dataFrame
val df = spark.sparkContext.parallelize(Seq(
("000000001", 10, 20, 30, 40, 50),
("000000002",