美图欣赏:
一.新鲜一感
你本来是有机会的,但是你输了,你不能总是活在过去
二.pv , uv 的概念
pv、uv属于统计网站的访问量
pv:用用户请求的ip地址来计算用户访问的网站的页面的次数
该需求的统计具有真实性,是衡量网站流量的重要指标
uv:可以理解为访问某网站的电脑的数量
网站判断来访电脑的身份是通过来访电脑的cookies实现的,往往是按天来统计
如果更换了ip后但不清除cookies,再访问相同的网站,该网站的统计的uv数是不变的
pv、uv一般是用作网站流量的趋势分析、数据对比分析、数据细分分析这三个维度 对比分析,就是给孤立的数据一个合理的参考系
GMV=销售额+取消订单金额+拒收订单金额+退货订单金额 环比:某年的1月的销量和该年的2月的销量的比较
同比:某年的1月的销量和前年的1月的销量的比较 定基比:以一个时间范围作为基点,其他时间范围的数量和基点进行比较
三.代码
数据样例:
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object WangZhanTJ {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("test").setMaster("local[*]")
val sc = new SparkContext(conf)
//setLogLevel 通过 SparkContext 指定日志级别 例: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN
//1.这里设置的Error,不然打印太多日志了
sc.setLogLevel("ERROR")
//2.拿到数据源
val lines = sc.textFile("D:\\scala学习笔记\\day08\\access.log")
//3.按空格切分,并且拿到的是第一个元素(也就是 127.0.0.1)
val ip = lines.map(_.split(" ")(0))
//4.ip个数进行总的统计,就是pv
val pv: Long = ip.count()
//5.将ip进行去重,就得到了uv
val uv: RDD[String] = ip.distinct()
//6.打印出pv的结果
println(pv.toString)
//7.打印出uv的结果
println(uv.collect.toBuffer)
}
}
结果:
20/03/16 23:30:06 INFO NettyBlockTransferService: Server created on 192.168.2.1:62238
20/03/16 23:30:06 INFO BlockManager: Using org.apache.spark.storage.RandomBlockReplicationPolicy for block replication policy
20/03/16 23:30:06 INFO BlockManagerMaster: Registering BlockManager BlockManagerId(driver, 192.168.2.1, 62238, None)
20/03/16 23:30:06 INFO BlockManagerMasterEndpoint: Registering block manager 192.168.2.1:62238 with 1989.6 MB RAM, BlockManagerId(driver, 192.168.2.1, 62238, None)
20/03/16 23:30:06 INFO BlockManagerMaster: Registered BlockManager BlockManagerId(driver, 192.168.2.1, 62238, None)
20/03/16 23:30:06 INFO BlockManager: Initialized BlockManager: BlockManagerId(driver, 192.168.2.1, 62238, None)
81
ArrayBuffer(192.168.170.113, 192.168.170.115, 192.168.170.111, 127.0.0.1, 192.168.170.114, 192.168.170.112, 192.168.170.116)
Process finished with exit code 0
————保持饥饿,保持学习
Jackson_MVP