package lambda.scalawordcountimport org.apache.hadoop.hive.ql.exec.spark.SparkUtilities/**** @Date 2021/8/20 11:22* @Version 1.0*//*** @Author wangyijie* @Date 2021/8/20 11:09* @Version 1.0*//*** 用戶活躍度分析報表計算* 源表:用戶活躍區間記錄表* 目標:ADS_APL_UCA** 連續活躍區間記錄表如下* Create table demo_dws_apl_uca_rng(* guid string, ---用戶標識* first_dt string, ---新增日期* rng_start string, ---區間起始* rng_end string ---區間結束* )* ROW FORMAT DELIMITED FIELDS TERMINATED BY ','* ;** 假設今天為2020-06-08號,統計今天活躍的人數量* 導入數據* a,2020-05-20,2020-05-20,2020-05-26* a,2020-05-20,2020-05-29,2020-06-20* x,2020-06-04,2020-06-04,2020-06-05* c,2020-06-04,2020-06-04,9999-12-31** 計算,在當天的所有活躍用戶中,* 連續活躍了1天的,?人* 連續活躍了2天的,?人* 連續活躍了3天的,?人* 連續活躍了4天的,?人* 連續活躍了5天的,?人* 。** 邏輯: 1.過濾除當天有活躍的記錄的 where rng_end='9999-12-31'* 2.根據這個用戶的 (區間起始-當天) 天數差,生成多條記錄 ; guid 活躍天數* 3.根據活躍天數分組,count人數,即可得到各種國樂天數下的人數**/
object ADS_APL_UCA {def main(args: Array[String]): Unit = {val spark = SparkUtilities.getSparkSession(this.getClass.getSimpleName)//讀取用戶連續活躍區間記錄表數據// 模擬:數據在一個csv文件中,真實的應該在hive的表中val rngDF = Option(spark.read).csv()val actDF = rngDFactDF.rdd.map}}// 根據 當天-區間起始 的差值,來生成多條 1~差值的 數據
val diffDF = actDF.selectExpr("guid","datediff('2020-06-08',rng_start) as days")
diffDF.show(100,false)
actDF.rdd.map(row=>{val guid =row.getAs[String]("guid").toLongval days= row.getAs[Int]("days")val res:for(i<- 1 to days+1) yields (guid,i) })
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态