以一小时为时间段获取日志中每个时间段的访问量,结果打印在控制台。
下面是代码,日志文件自己找。
import java.text.SimpleDateFormat
import java.util.Date
import org.apache.spark.{SparkConf, SparkContext}
object RDD_Operator_Transform_groupBy_Test {
def main(args: Array[String]): Unit = {
//TODO 创建环境
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparkConf)
//TODO RDD算子——groupBy
println("获取日志中每个时间段的访问量")
val rdd = sc.textFile("datas/apache.log")//文件路径
val timeRDD = rdd.map(
line => {
val datas = line.split(" ") //以空格分离
val time = datas(3) //取第三位
val sdf = new SimpleDateFormat("DD/MM/YYYY:hh:mm:ss")
val date: Date = sdf.parse(time) //解析时间
val sdf1 = new SimpleDateFormat("hh") //时间段为小时
val hour: String = sdf1.format(date) //传入时间
(hour, 1)
}
).groupBy(_._1)
timeRDD.map{
case (hour, iter) => { //模式匹配
(hour, iter.size)
}
}.collect().foreach(println)
//TODO 关闭环境
sc.stop()
}
}