spark
火焰蓝
毕业于湖北民族大学,有三年的开发经验
展开
-
算子的含义
Transform: 1. map:rdd中的每项数据进行map里的操作后,会形成一个个新的元素的新rdd flatMap:在map的基础上进行扁平化,形成一个新的rdd2. distinct:转换操作,去重 filter:对rdd中的元素进行过滤 filterByRange:范围过滤,作用于键值对RDD,对RDD中元素进行过滤,返回键在指定范围内的元素3. union:并集操作,不去重 intersection:交集操作,去重 subtract:类似intersection,返回在rdd中出...原创 2020-08-18 20:35:06 · 531 阅读 · 0 评论 -
广播变量
有一个大的数据集和一个小的数据集,把每一个小的数据集在每一个executor里面进行缓存,大的小的数据集放在hdfs里面,如果传统的方法,那么就是调用join ,join.底层就是cogroup方法,1.先把小的数据处理一下,但是每个Task只是读取部分数据,然后把每个Task的部分数据缓存起来,2.读取大的数据,然后关联一些规则数据,也就是缓存起来的那部分小数据,但也有可能关联不上,当前的应用需要在executor里面进行缓存,3.在进行广播应用的时候,只需要把数据广播到当前任务的execu.原创 2020-08-15 20:53:49 · 1236 阅读 · 0 评论 -
自定义分区编号
val isLocal = args(0).toBoolean val conf = new SparkConf().setAppName(this.getClass.getCanonicalName) if (isLocal) { conf.setMaster("local[*]") } val sc = new SparkContext(conf) //指定以后从哪里读取数据创建RDD val lines = sc.textFile(arg..原创 2020-08-13 22:52:03 · 219 阅读 · 0 评论 -
求连续登陆的用户日期
guid01,2018-02-28guid01,2018-03-01guid01,2018-03-02guid01,2018-03-04guid01,2018-03-05guid01,2018-03-06guid01,2018-03-07guid02,2018-03-01guid02,2018-03-02guid02,2018-03-03guid02,2018-03-06 //第一个参数就传true或false因为以后有可能在本地执行,有可能提交到集群里面 val isl.原创 2020-08-11 15:24:27 · 237 阅读 · 0 评论 -
join算子
join:val rdd1 =sc.parallelize(List(("spark",1),("hadoop",1),("spark",2),("hadoop",2),("hive",2)))sc.parallelize(List(("spark",3),("hive",3),("spark",4),("hadoop",2)))------->d.RDD[(String, (Int, Int))这个有点类似val rdd0 = sc.flatMapValues(List("a..原创 2020-08-09 23:36:37 · 257 阅读 · 0 评论 -
cogroup算子
cogroup:协分组val rdd1 = sc.parallelize(List(("tom",1),("tom",2),("jerry",3),("kitty",2)))--->(String, Int)val rdd2 = sc.parallelize(List(("jerry",2),("tom",1),("jerry",3),("kitty",2)))---->[(String, Int)]val rdd3 = rdd1.cogroup(rdd2)----&g.原创 2020-08-09 21:52:09 · 532 阅读 · 0 评论 -
算子三
aggregateByKey,foldByKey,redceByKey,combineByKey底层调用的都是combineByKeyWithClassTag,combineByKeyWithClassTag要传入三个函数,第一个函数是key的第一个value拿出来进行运算,是吧每一个分区内,相同key的value进行运算,第三个是进行全局运算的时候,将灭一个分区得到的,key相同的value进行运算,注意combineByKey,与combineByKeyWithClassTag,都必须要指定第二个.原创 2020-08-09 16:18:36 · 139 阅读 · 0 评论 -
算子第二部分
groupByKey:底层代码:先创建一个CompactBuffer,这时是一个特殊的集合,可以随时添加,也就是先把key相同的数据放到CompactBuffer集合里面,如果后面有相同的key,那就先添加上去,底层也会先局部分组聚合,然后再shuffle到下游的时候,再进行一次全局分组,这次是相同的key的CompactBuffer相加def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppNam.原创 2020-08-08 23:34:37 · 178 阅读 · 0 评论 -
算子
MapPartitionsRDD 算子的程序与应用程序底层执行流程,1.连接Spark配置文件,设置项目名称,和创建本地地址,2.创建连接,创建RDD,分三个去,把9个数字均匀的分配到三个去里面,调用RDD,对RDD操作,本质上是对RDD里面的每一个分 区进行操作,每一个分区有对应一个Task,Task里面的逻辑也就是分区对应的计算逻辑,3.调用map,从下面的程序中可以得知,每一条数据都会调用一次map函数,这样就降低数据处理的效率,4.分析一下map底层的实现逻辑,在调用...原创 2020-08-07 22:21:49 · 332 阅读 · 0 评论 -
RDD执行的流程
RDD执行流程 textFile() 是创建最原始的RDD,不属于transformation 在真正计算的时候有可能有多个阶段,有多少个阶段呢,取决于所处理的数据也没有shuffle,如果有shuffle,就被划分成两个阶段,因为需要按照一定的规律把数据分到同一个分区里面,如果有shuffle,就要切分stage,程序先执行先前的stage,然后再执行后面的stage,一个stage会有多个task,同一个stage,里面多个taask的计算逻辑是一样的,只不过各个task的计算数据不一...原创 2020-08-06 19:51:23 · 1521 阅读 · 0 评论 -
Spark内部流程
一.standalone client模式1.启动master,和worker ,然后worker向master建立连接,然后把计算机资源汇报给master,然后master保存这些注册信息,然后向worker返回注册成功的信息 2.然后worker向master发送心跳,目的是向master报活, 3.这时候启动客户端,客户端会提交任务,在提交任务的时候,会指定自身需要多少资源,比如说需要多少内存核,通过底层rcp,与master建立起通信, 4.这时候master知道要有任务要提交了,这时.原创 2020-08-04 23:34:37 · 222 阅读 · 0 评论 -
spark API的操作
object WordCount { def main(args: Array[String]): Unit = { //创建一个SparkContext,用来闯将最原始的RDD //创建一个SparkConf().setAppName(),加载SparkConf文件,并为其取名字"WordCount" val conf = new SparkConf().setAppName("WordCount") //创建SparkContext,他可以跟集群建立连接申请资源,里.原创 2020-08-04 23:25:52 · 298 阅读 · 0 评论