spark系列(3)core

SparkCore提供Spark最基础与最核心的功能

1:SparkContext:

通常而言,Driver Application的执行与输出都是通过SparkContext来完成的。在正式提交Application之前,首先需要初始化SparkContext。SparkContext隐藏了网络通信、分布式部署、消息通信、存储能力、计算能力、缓存、测量系统、文件服务、Web服务等内容,应用程序开发者只需要使用SparkContext提供的API完成功能开发。SparkContext内置的DAGScheduler负责创建Job,将DAG中的RDD划分到不同的Stage,提交Stage等功能。内置的TaskScheduler负责资源的申请,任务的提交及请求集群对任务的调度等工作。

2.存储体系:

Spark优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘,这极大地减少了磁盘IO,提升了任务执行的效率,使得Spark适用于实时计算、流式计算等场景。此外,Spark还提供了以内存为中心的高容错的分布式文件系统Tachyon供用户进行选择。Tachyon能够为Spark提供可靠的内存级的文件共享服务。

3.计算引擎:

计算引擎由SparkContext中的DAGSchedulerRDD以及具体节点上的Executor负责执行的MapReduce任务组成。DAGScheduler和RDD虽然位于SparkContext内部,但是在任务正式提交与执行之前会将Job中的RDD组织成有向无环图(DAG),并对Stage进行划分,决定了任务执行阶段任务的数量迭代计算shuffle等过程。

4.部署模式:

由于单节点不足以提供足够的存储和计算能力,所以作为大数据处理的Spark在SparkContext的TaskScheduler组件中提供了对Standalone部署模式的实现和Yarn、Mesos等分布式资源管理系统的支持。通过使用StandaloneYarnMesos等部署模式为Task分配计算资源,提高任务的并发执行效率。

group:根据key值相同进行分组操作

object Tao {
  def main(args: Array[String]): Unit = {
    val spark = new SparkContext(new SparkConf()
      .setAppName("word")
      .setMaster("local")
    )
    val data1 = spark.textFile("data/taobao_persona.csv")
    val data2 = spark.textFile("data/address.csv")
    f1(data1)

  }
  //group():分组 key相同将val放在一起
  //groupByKey()
  //淘宝商品购买量占有查看量的百分比 转化率
  /*
  首先需要得到商品的操作数 10个人操作还是几个人操作
  然后算出浏览人数和购买的人数 然后相除
  * */
  def f1(data:RDD[String])={
    val dataRDD = data
      .map(x => {
        val ts = x.split(",")
        (ts(0),ts(1),ts(2))
      })
      //同样商品id全取出来
      .groupBy(
      (x) => x._2
      //(商品ID,CompactBuffer((用户ID,商品ID,操作编号)))
      ).mapValues(
        x => {
          val a = x.count(//本质上还是普通的scala代码
            //计算商品浏览次数
            active => {
              active._3 == "1"
            }
          )
          val b = x.count(
            active => {
              active._3 == "4"
            }
          )
          (b.toDouble / a.toDouble)
        }
    ).sortBy(_._2,false)
    dataRDD.foreach(println(_))    //所有操作key相同都会转换成迭代器的类型存入值
    //数据计算结果保存 可以保存到本地 或者Mysql或Hive 或者文档中
    dataRDD.saveAsTextFile("data/out/tao")//保存到data目录下out/tao 分区存放
  }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值