文档章节

SparkSQL内置函数统计uv实例

别寒
 别寒
发布于 2017/07/28 14:45
字数 378
阅读 7
收藏 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
博文 271
码字总数 137605
作品 0
永州
程序员
阿里年薪50WJAVA工程师转大数据学习路线!

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

JAVA丶学习
04/25
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
丹露 datav数据大屏经验总结

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

dlpy
01/03
0
0
PySpark SQL常用语法

许多数据分析师都是用HIVE SQL跑数,这里我建议转向PySpark: PySpark的语法是从左到右串行的,便于阅读、理解和修正;SQL的语法是从内到外嵌套的,不方便维护; PySpark继承Python优美、简洁...

真依然很拉风
05/14
0
0
数值型统计工具--jtstats

在平时开发中,经常要希望统计一些性能之类的数值型的统计,后来了解到 statsD,它的使用非常简单。后来想自己写写统计,打发时间,因些创建了JTStats这个项目。 JTStats 主要用于数值型的统...

墨鱼仔
2014/12/18
634
0

没有更多内容

加载失败,请刷新页面

加载更多

java基础知识,小栗子

来操作一下数组.....注意带参数的变长数组的使用. package com.avatus;import java.util.Random;import java.util.Scanner;public class Main { public static void main(St...

Oh_really
17分钟前
0
0
SSO单点登录PHP简单版

  前面做了一个新项目,需要用户资源可以需要共享。由于之前没有做过这样的东西,回家之后,立马网站百度“单点登录”。帖子很多,甄别之后,这里列几篇认为比较有营养。   http://blog...

slagga
54分钟前
2
0
Java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1 概述 泛型在j...

hensemlee
58分钟前
2
0
Annotation注解详细介绍

目录介绍 1.Annotation库的简单介绍 2.@Nullable和@NonNull 3.资源类型注释 4.类型定义注释 5.线程注释 6.RGB颜色纸注释 7.值范围注释 8.权限注释 9.重写函数注释 10.返回值注释 11.@Keep注释...

潇湘剑雨
今天
2
0
一步步编写自己的PHP爬取代理IP项目(二)

这一章节我们正式开展我们的爬虫项目,首先我们先要知道哪个网站能获取到免费代理IP,目前比较火的有西刺代理,快代理等,这里我们拿西刺代理作为例子。 这里就是一个个免费的IP地址以及各自...

NateHuang
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部