具体要求
有一些较为杂乱的数据需要清洗,现在需要将其完成下列操作
取出IP,生成只有一个IP的数据集 简单清洗 统计IP出现的次数 排序,按照IP出现的次序排序 取出前十
数据展示
代码实现
import org.apache.commons.lang3.StringUtils
import org.apache.spark.{SparkConf, SparkContext}
object AccessLogTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[6]").setAppName("AccessLogTest")
val sc = new SparkContext(conf)
val sourceRDD = sc.textFile("data/access_log_sample.txt")
//取出IP赋予词频1
val ipRDD = sourceRDD.map(item => (item.split(" ")(0),1))
.filter(item => StringUtils.isNotEmpty(item._1))//去除掉item中第一个(也就是value,IP)为空的数据
.reduceByKey((curr,agg)=>curr + agg)//统计IP出现的次数
.sortBy(item => item._2,ascending = false)//按照第二项进行牌序(默认是升序),false是降序
.collect().take(10)//收集结果,只取出前十
ipRDD.foreach(item => println(item))
}
}