docker hadoop,spark處理

 2023-11-16 阅读 13 评论 0

摘要: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*//*** 用戶活躍度分析報表計算* 源表:用戶
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) })

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/173802.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息