import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}//TODO:利用spark实现点击流日志分析---------> PV
object PV {
def main(args: Array[String]): Unit ={//1、构建SparkConf
val sparkConf: SparkConf =newSparkConf().setAppName("PV").setMaster("local[2]")//2、构建SparkContext SparkContext该对象非常重要//它是所有spark程序的执行入口,它会构建DAGScheduler和TaskScheduler对象
val sc =newSparkContext(sparkConf)
sc.setLogLevel("warn")//3、读取数据文件
val data: RDD[String]= sc.textFile("E:\\data\\access.log")//4、统计pv
val pv: Long = data.count()println("PV:"+pv)
sc.stop()}}
1.2 统计UV
代码开发
import org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.rdd.RDD
//TODO:利用spark实现点击流日志分析-----------UV
object UV {
def main(args: Array[String]): Unit ={//1、构建SparkConf
val sparkConf: SparkConf =newSparkConf().setAppName("UV").setMaster("local[2]")//2、构建SparkContext
val sc =newSparkContext(sparkConf)
sc.setLogLevel("warn")//3、读取数据文件
val data: RDD[String]= sc.textFile("E:\\data\\access.log")//4、切分每一行,获取第一个元素 也就是ip
val ips: RDD[String]= data.map( x =>x.split(" ")(0))//5、按照ip去重
val distinctRDD: RDD[String]= ips.distinct()//6、统计uv
val uv: Long = distinctRDD.count()println("UV:"+uv)
sc.stop()}}
1.3 统计TopN
代码开发
import org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.rdd.RDD
//todo:利用spark实现点击流日志分析-----------TopN(求页面访问次数最多的前N位)
object TopN {
def main(args: Array[String]): Unit ={//1、构建SparkConf
val sparkConf: SparkConf =newSparkConf().setAppName("TopN").setMaster("local[2]")//2、构建SparkContext
val sc =newSparkContext(sparkConf)
sc.setLogLevel("warn")//3、读取数据文件
val data: RDD[String]= sc.textFile("E:\\data\\access.log")//4、切分每一行,过滤出丢失的字段数据,获取页面地址
val filterRDD: RDD[String]= data.filter(x=>x.split(" ").length>10)
val urlAndOne: RDD[(String, Int)]= filterRDD.map(x=>x.split(" ")(10)).map((_,1))//5、相同url出现的1累加
val result: RDD[(String, Int)]= urlAndOne.reduceByKey(_+_)//6、按照次数降序
val sortedRDD: RDD[(String, Int)]= result.sortBy(_._2,false)//7、取出url出现次数最多的前5位
val top5: Array[(String, Int)]= sortedRDD.take(5)
top5.foreach(println)
sc.stop()}}