Spark Core练习

Spark如何进行大数据业务处理:
拿到需求之后:
1) 分析
2) 功能拆解:中文描述 <== 详细设计说明书
3) 代码的开发:代码实现
2. 生产上边界值 ==> 使得你的代码具有健壮性 事先考虑一些异常。
避免因为一些异常使整个作业挂掉

WordCount

	object WordCounts {
	  def main(args: Array[String]): Unit = {
	    val sparkConf = new SparkConf()
	    val sc = new SparkContext(sparkConf)
	    val textFile = sc.textFile(args(0))  //这里的参数如果是一个目录的路径,则将目录下的所有文件写入
	    wc.collect().foreach(println)  //将结果提交到控制台,没什么用
	    wc.saveAsTextFile(args(1))   //可以以压缩的方式存储 args(1)为写出的操作
	    sc.stop()
	  }
	}

求用户访问量(每个用户访问的)的TOP5

1) Hive 实现
	select user_id,count(1) c from page_views
		group by user_id order by c desc limit 5 ;


2) Spark Core 实现
	需求:求用户访问量的TOP5     开发其实在做填空
	需求分析:用户	   
				   以Tab分割  splits
				   拿到userid  splits(5)
		    访问量	   
				   map((_,1))
				   reduceByKey(_+_)
		    TOP N       
				   sortBy(_._2)
				   take(5)
 
	object PageViewsApp{
		def main (args:Array[String]) :Unit = {
			val sparkConf = new SparkConf()
			val sc = new SparkContext(sparkConf)
			val textFile = sc.textFile(args(0))
			val wc = textFile.map((_.split("\t")(5),1)).reduceByKey(_+_).sortBy(_._2,fault).take(5)


			sc.stop()

		}
	}

计算平均年龄
数据格式: ID + “ ” + 年龄

实现思路:(年龄的总和/人数)
	1) 年龄
	2) 人数
	3) 年龄/人数

object PageViewsApp{
		def main (args:Array[String]) :Unit = {
			val sparkConf = new SparkConf()
			val sc = new SparkContext(sparkConf)
			val textFile = sc.textFile(args(0))
			val agedata = textFile.map(_.split(" ")(1))
			val peoplenum = agedata.count()
			val agesum = agedata.map(_.toInt).reduce(_+_)
			sc.stop()

		}
	}

求男女人数及最高和最低身高
数据: ID + “ ” + 性别 + “ ” + 身高
需求: 统计男女人数及最高和最低身高
分析:
1.取出性别
2.RDD => MRDD + FRDD **** (不用分组)
3.max min

求每个域名的流量之和
lines.map(x=>{
val splits = x.split("\t")
var traffic = 0
if(splits.length==72){
val domain = splits(10)
try{ //如果不是数字,就不能tolong,直接报错,没有健壮性
traffic = splits(19).toLong
}catch{
case e:Exception => 0L
}

		(domain,traffic)
	}else{
	    ("-",0L)
	}
}).reduceByKey(_+_).collect.saveAsTextFile(......)

求每个省份的访问次数的TOP10

	lines.map(x=>{
		val splits = x.split("\t")
		if(splits.length==72){
			val ip = splits(6)
			val province = ip.xxxx
			(province,1)
		}else{
			(" ",1)
		}.reduceByKey(_+_)
	})

求每个域名下访问数TOP10的文件资源

lines.map(x=>{
	val splits = x.split("\t")
	if(splits.length==72){
		val splits1 = splits(n).split("/")
		if(splits1.length>4){
			val a = "/"+splits1(3)+"/"+splits1(4)+"/"+splits1(5)+"/"+splits(6).split("?")(0)
			(splits1(2), a , 1 ,splits())
		}else{
			(splits1(2),splits1(3),1,splits())
		}	
	}else{
		("","",0,0)
	}
})
  1. 使用SparkCore完成每个域名每个小时的流量统计
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值