大数据全系列 教程
1869个小节阅读:468k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
package com.itbaizhan.core
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**析日志中各个网站的UV数
* 126.54.121.136 浙江 2030-07-13 1594648118250 4218643484448902621 www.jd.com Comment
* ->126.54.121.136_www.jd.com
* 126.54.121.136 浙江 2030-07-13 1594648118250 4218643484448902621 www.jd.com Buy
* ->126.54.121.136_www.jd.com
* 121.54.121.131_www.jd.com
* 去重处理,过滤掉重复的数据
* 按照_拆分 (www.jd.com,1)
* 累加求和
* (www.jd.com,x)
*/
object CountUV {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
conf.setMaster("local[1]")
conf.setAppName("pv")
val sc = new SparkContext(conf)
//1.设置日志显示的级别
sc.setLogLevel("Error")
//2.读取hdfs文件系统的中的文件,并创建rdd对象
val lines: RDD[String] = sc.textFile("hdfs://mycluster/pvuv/input/pvuvdata")
//3.抽取每行数据的ip地址和网址->ip地址_网址
lines.map(line=>{
val data: Array[String] = line.split("\t")
data(0)+"_"+data(5)
}).distinct()//4.去重
//5.ip地址_网址 转换为 (网址,1)
.map(ele=>{(ele.split("_")(1),1)})
//6.将相同网址的数据分为一组,并将value做聚合加操作
.reduceByKey(_+_)
//7.按照uv数量从高到低排序
.sortBy(tp=>{tp._2},false)
//8.输出结果或者将结果保存到HDFS文件系统上
//.foreach(println)
.saveAsTextFile("hdfs://mycluster/pvuv/uvoutput")
sc.stop()
}
}