这次我们介绍人口密度计算的案例
在案例之前会有spark的scala统计点击流日志代码小案例。
1. 击流日志分析案例
1.1需求
下面的系列数据主要包括用户IP,浏览网址,时间,请求方式等,统计PV,UV,和被访问的TopN,
下面是一条样例数据
194.237.142.21 - - [18/Sep/2013:06:49:18 +0000] "GET /wp-content/uploads/2013/07/rstudio-git3.png HTTP/1.1" 304 0 "-" "Mozilla/4.0 (compatible;)"
1.2代码实现
统计PV量,设置相同的K-V(PV,1),通过reduceByKey进行累加
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
//todo:需求:利用spark分析点击流日志数据------PV总量
object PV {
def main(args: Array[String]): Unit = {
//1、创建sparkConf对象
val sparkConf: SparkConf = new SparkConf().setAppName("PV").setMaster("local[2]")
//2、创建sparkContext对象
val sc = new SparkContext(sparkConf)
//3、读取数据文件
val data: RDD[String] = sc.textFile("D:\\data\\access.log")
//4、获取pv总量
println(data.count())
//5、关闭sparkContext
sc.stop()
}
}
统计UV数量,通过
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object UV {
def main(args: Array[String]): Unit = {
//todo:构建SparkConf和 SparkContext
val sparkConf: SparkConf = new SparkConf().setAppName("UV").setMaster("local[2]")
val sc: SparkContext = new SparkContext(sparkConf)
//todo:读取数据
val file: RDD[String] = sc.textFile("d:\\access.log")
//todo:对每一行分隔,获取IP地址
val ips: RDD[(String)] = file.map(_.split(" ")).map(x=>x(0))
//todo:对ip地址进行去重,