首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark源码和调优简介 Spark Core

作者:calvinrzluo,腾讯 IEG 后台开发工程师

本文基于 Spark 2.4.4 版本的源码,试图分析其 Core 模块的部分实现原理,其中如有错误,请指正。为了简化论述,将部分细节放到了源码中作为注释,因此正文中是主要内容。

Spark Core

RDD

RDD(Resilient Distributed Dataset),即弹性数据集是 Spark 中的基础结构。RDD 是 distributive 的、immutable 的,可以被 persist 到磁盘或者内存中。

对 RDD 具有转换操作和行动操作两种截然不同的操作。转换(Transform)操作从一个 RDD 生成另一个 RDD,但行动(Action)操作会去掉 RDD 的 Context。例如是行动操作,返回的是一个数组而不是 RDD 了,如下所示

转换操作是 Lazy 的,直到遇到一个 Eager 的 Action 操作,Spark 才会生成关于整条链的执行计划并执行。这些 Action 操作将一个 Spark Application 分为了多个 Job。

常见的Action 操作包括:、、、、、、、、、、、。

常见 RDD

RDD 是一个抽象类,在 Spark 中有诸如ShuffledRDD、HadoopRDD等实现。每个 RDD 都有对应的方法,用来描述这个 RDD 的计算方法。需要注意的是,这些 RDD 可能被作为某些 RDD 计算的中间结果,例如,对应的,例如也可能是经过多个 RDD 变换得到的,其决定权在于所使用的算子。

我们来具体查看一些 RDD。

首先,我们需要了解一下什么是操作,这个方法有多个重载版本。如下所示的版本,对或或的所有的 key,生成一个,表示对于这个 key,这三个 RDD 中所有值的集合。容易看到,这个算子能够被用来实现 Join 和 Union(不过后者有点大材小用了)

这里的是一个,具有和两个方法。通过继承可自定义分区的实现方式,目前官方提供有和等。

一般通过算子得到

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200116A0PX3V00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券