关闭

spark实现uv统计(使用内置函数)

标签: spark函数
1761人阅读 评论(0) 收藏 举报
废话不多说,具体实现代码如下:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.types.StringType
import org.apache.spark.sql.types.IntegerType
import org.apache.spark.sql.types.StructField
import org.apache.spark.sql.functions._
/**
 *
 *网站uv的统计
 *
 */

object DailyUV {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("DailyUV")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    
    // 这里着重说明一下!!!
    // 要使用Spark SQL的内置函数,就必须在这里导入SQLContext下的隐式转换
    import sqlContext.implicits._
    
    // 构造用户访问日志数据,并创建DataFrame

    // 模拟用户访问日志,日志用逗号隔开,第一列是日期,第二列是用户id

   //如果数据是从kafka或者hdfs上获取,那么稍微修改下数据来源即可使用

    val userAccessLog = Array(
        "2015-10-01,1122",
        "2015-10-01,1122",
        "2015-10-01,1123",
        "2015-10-01,1124",
        "2015-10-01,1124",
        "2015-10-02,1122",
        "2015-10-02,1121",
        "2015-10-02,1123",
        "2015-10-02,1123");
    val userAccessLogRDD = sc.parallelize(userAccessLog, 6)
    
    // 将模拟出来的用户访问日志RDD,转换为DataFrame
    // 首先,将普通的RDD,转换为元素为Row的RDD
    val userAccessLogRowRDD = userAccessLogRDD
        .map { log => Row(log.split(",")(0), log.split(",")(1).toInt) }
    // 构造DataFrame的元数据
    val structType = StructType(Array(
        StructField("date", StringType, true),
        StructField("userid", IntegerType, true)))  
    // 使用SQLContext创建DataFrame
    val userAccessLogRowDF = sqlContext.createDataFrame(userAccessLogRowRDD, structType)  
    
    // 这里讲解一下uv的基本含义和业务
    // 每天都有很多用户来访问,但是每个用户可能每天都会访问很多次
    // 所以,uv,指的是,对用户进行去重以后的访问总数
    
    // 这里,正式开始使用Spark 1.5.x版本提供的最新特性,内置函数,countDistinct
    // 讲解一下聚合函数的用法
    // 首先,对DataFrame调用groupBy()方法,对某一列进行分组
    // 然后,调用agg()方法 ,第一个参数,必须,必须,传入之前在groupBy()方法中出现的字段
    // 第二个参数,传入countDistinct、sum、first等,Spark提供的内置函数
    // 内置函数中,传入的参数,也是用单引号作为前缀的,其他的字段
    userAccessLogRowDF.groupBy("date")
        .agg('date, countDistinct('userid))  
        .map { row => Row(row(1), row(2)) }   
        .collect()
        .foreach(println)
  }
}
1
0
查看评论

使用Spark计算PV、UV

日志字段格式: id,ip,url,ref,cookie,time_stamp 把日志文件放到HDFS。仅取了1000行。 hadoop fs -put 1000_log hdfs://localhost:9000/user/root/input 计算PV。 scala> val textF...
  • ozhaohuafei
  • ozhaohuafei
  • 2015-01-28 14:06
  • 5852

使用Spark计算PV、UV

版权声明:本文为博主原创文章,未经博主允许不得转载。 日志字段格式: id,ip,url,ref,cookie,time_stamp 把日志文件放到HDFS。仅取了1000行。 [plain] view plain copy ...
  • qiezikuaichuan
  • qiezikuaichuan
  • 2016-07-24 22:52
  • 1928

使用sparksql开发pv,uv,二跳率

uv:user views,count(distinct guid) pv:page views,count(url) 二跳率:count(distinct case when pv>=2 then sessionid else null end) / count(distinct ses...
  • zengxiaosen
  • zengxiaosen
  • 2016-09-21 17:28
  • 1185

[Spark-内置函数使用]--spark实现UV统计

spark实现UV统计
  • high2011
  • high2011
  • 2016-07-09 14:35
  • 809

网站流量统计之PV和UV

转自:http://blog.csdn.net/webdesman/article/details/4062069 如果您是一个站长,或是一个SEO,您一定对于网站统计系统不会陌生,对于SEO新手来说,统计系统中的一些概念不是很清楚,今天讲讲什么是PV和UV!    ...
  • dazhi_100
  • dazhi_100
  • 2014-05-07 10:04
  • 2216

shell统计pv和uv、独立ip的方法

每天分析日志的哥们实在伤不起,经常需要给出PV,UV,独立IP等一些统计值,使用C/C++,java都可以写,过程是这样的,先读取文件,逐行扫描,把能标记的值放入数据结构中,排重得出最终结果,其实Linux本身有很强大的文本处理功能,完全可以用shell + 一些文本小工具得出结果。 Nngix输...
  • ljp812184246
  • ljp812184246
  • 2016-04-17 21:52
  • 1133

Flink流计算编程--状态与检查点

Flink 流计算 快照 状态
  • lmalds
  • lmalds
  • 2016-07-21 18:21
  • 4679

Spark Streaming实战对论坛网站动态行为pv,uv,注册人数,跳出率的多维度分析

论坛数据运行代码自动生成,该生成的数据会作为Producer的方式发送给Kafka,然后SparkStreaming程序会从Kafka中在线Pull到论坛或者网站的用户在线行为信息,进而进行多维度的在线分析 数据格式如下: date:日期,格式为yyyy-MM-dd timestamp:时间戳 us...
  • m0_37739193
  • m0_37739193
  • 2017-07-06 17:41
  • 1744

SparkSteaming进行UV统计

需求:每个一分钟统计一次最近一个小时UV    思考过程:由于UV是矢量数据,不能每分钟的UV最一个统计,在基于每分钟的计算结果进行累加计算出最近一个小时用户量的求和。 SparkStreaming提供的窗口函数,比较知名的reduceByKeyAndWindow开窗函数,该函数...
  • andyliuzhii
  • andyliuzhii
  • 2017-06-29 17:17
  • 400

sparkstreaming完整例子

博客地址:http://www.fanlegefan.com 原文地址:http://www.fanlegefan.com/index.php/2017/07/19/sparkstreaminglizi/ 摘要 本文主要实现一个简单sparkstreaming小栗子,整体流程是从kafka实时读...
  • woloqun
  • woloqun
  • 2017-07-25 09:49
  • 2109
    个人资料
    • 访问:893784次
    • 积分:12944
    • 等级:
    • 排名:第1263名
    • 原创:423篇
    • 转载:64篇
    • 译文:54篇
    • 评论:102条
    博客专栏
    最新评论