Spark 项目分析网络URL数据。加深RDD理解
要求分析出每个域名的前三个访问量是哪些 URL
数据格式
3 http://tinyurl.com/3jcvsm
//初始化SparkCOntext,这里用的是本地模式运行计算,并导入数据源
val conf = new SparkConf().setAppName(this.getClass().getSimpleName().filter(!_.equals('$'))).setMaster("local")
val sc = new SparkContext(conf)
val line = sc.textFile("/home/abc/apps/spark_data/url")
//筛选数据因为有的数据可能不散URL格式的数据
val rdd1 = line.filter(x=>{
val tmp = x.split(":")
if (tmp.length>=3||x.contains("[["))
false
else
true
}).map(
x=>{
val data = x.split("\t")
val urls = new URL(data(1))
val host = urls.getHost
(data(1), 1)
}
)
//进行reduce求和
val rdd2 = rdd1.reduceByKey((x,y)=>x+y)
//操作url 提取出url的host
val rdd3 = rdd2.map{case(d,t)=>{
val urls = new URL(d)
val host = urls.getHost
(host,d, t)
}}
//把数据进行分组
val rdd4 = rdd3.groupBy(_._1)
//分组后进行排序操作
val rdd5 = rdd4.map(sx=>{
val key = sx._1
val value = sx._2;
val sorval = value.toList.sortBy(_._3).take(3)
(key,sorval)
})
//把操作完的数据存入本地文件
rdd5.saveAsTextFile("/home/abc/apps/spark_data/output")
完成操作