文档章节

SparkSQL内置函数统计uv实例

别寒
 别寒
发布于 2017/07/28 14:45
字数 378
阅读 11
收藏 0
package com.hhb.spark.sql

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType};
import org.apache.spark.sql.functions._

/**
  * Created by dell on 2017/7/28.
  */
object DailyUV {
  def main(args: Array[String]) {
    val conf = new SparkConf()
      .setAppName("DailyUV")
      .setMaster("local")
      .set("spark.testing.memory", "2147480000")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)

    // 要使用spark sql 内置函数,就必须在这里导入sqlcontext下的隐式转换
    import sqlContext.implicits._

    // 构造用户访问日志数据,并创建dataframe
    // 模拟用户访问日志,日志用逗号隔开,第一列日期,第二栏用户id
    val userAccesslog = Array(
      "2017-07-01,1122",
      "2017-07-01,1122",
      "2017-07-01,1123",
      "2017-07-01,1124",
      "2017-07-01,1124",
      "2017-07-01,1123",
      "2017-07-02,1124",
      "2017-07-02,1124",
      "2017-07-02,1123",
      "2017-07-02,1124",
      "2017-07-03,1124"
    )
    val userAccessLogRDD = sc.parallelize(userAccesslog, 5)

    // 将模拟出来的用户访问日志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)

    // 这里正式开始使用spark1.5.x提供的最新特效 内置函数
    /**
      * 聚合函数的用法
      * 首先,对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)



  }
}

© 著作权归作者所有

别寒
粉丝 30
博文 273
码字总数 155300
作品 0
永州
程序员
私信 提问
Spark+Hbase 亿级流量分析实战( PV/UV )

作为一个亿级的流量分析统计系统怎么能没有 PV / UV 这两经典的超级玛丽亚指标呢,话说五百年前它俩可是鼻祖,咳咳...,不好意思没忍住,回归正文,大猪在上一篇已经介绍了 小巧高性能ETL程序...

大猪大猪
05/13
0
0
阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习
2018/04/25
0
0
丹露 datav数据大屏经验总结

11/21/2017 11:31:46 AM 第一版 丹露成都网络技术有限公司 运维部:周龙波 11/27/2017 2:04:32 PM 第二版 新增 pv/uv 折线图 访问来源 地图 的内网IP过滤功能以及使用新的时间段函数 12/6/2...

dlpy
2018/01/03
0
0
SparkSQL、RDD和DataFrame基本操作

1 三者比较 易操作程度 SparkSQL > DataFrame > RDD 2 创建RDD、DataFrame和SparkSQL 2.1 创建RDD rawUserData = sc.textFile("file:/home/badou/Downloads/u.user") rawUserData.count()` 输......

路人乙yh
03/23
0
0
Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)

在Spark中,也支持Hive中的自定义函数。自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似tochar,todate等 UDAF(User- Defined Aggregation Funcation...

青夜之衫
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
2.1K
20
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
8
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
11
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
19
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部