只需要 order by CAST(cc.XX as INT)
XX为排序列名
val data4 = Seq(
("ming", "20190101004050", "man"),
("min", "20190101004050", "man"),
("mi", "20190101004050", "man"),
("kun", "20190102014050", "woman"),
("kun", "20190102012250", "man"),
("tian", "20190201025050", "man"),
("yarn", "20190205235050", "woman"),
("raa", "20190205113250", "man"),
("raa", "20190205115050", "woman"),
("kun", "20190201235050", "woman")
).toDF("name", "t", "gender")
data4.show()
data4.createOrReplaceTempView(s"data0")
val hourdata = Seq(
("0"),("1"),("2"),("3"), ("4"),("5"),
("6"),("7"),("8"),("9"),("10"),("11"),("12"),
("13"),("14"),("15"),("16"),("17"),("18"),
("19"),("20"),("21"),("22"),("23")
).toDF("hour")
hourdata.createOrReplaceTempView(s"hourdata")
hourdata.show()
val frame = spark.sql(
s"select ”2019“ as dayId, * from "+
s"("+
s"select * from"+
s" (select " +
s"count(name) as ${name}_cnt, count(distinct $name) as ${name}_distinct_cnt,"+
s"count(gender) as ${gender}_cnt, count(distinct $gender) as ${gender}_distinct_cnt,"+
s"aa.hour as hourId from"+
s"(select name, gender" +
s"hour(transformDateNew(t)) as hour " +
s"from data0) aa group by aa.hour" +
s") bb " +
s" full outer join hourdata h on bb.hourId=h.hour"+
s") cc order by CAST(cc.hour as INT)"+
s"").drop("hourId").na.fill(0)
结果: