SparkContext SparkContext 是在 spark 库中定义的一个类,作为 spark 库的入口点: 它表示连接到 spark,在进行 spark 操作之前必须先创建一个 SparkContext 的实例,并且只能创建一个: 利用 SparkContext 实例创建的对象都是 RDD,这是相对于 SparkSession 说的,因为 它创建的对象都是 DataFrame: 创建 sc class SparkContext(__builtin__.object): def __i…
分别观察一下集合与算子的sortBy()的参数列表 普通集合的sortBy() RDD算子的sortBy() 结论:普通集合的sortBy就没有false参数,也就是说只能默认的升序排. 如果需要对普通集合中的元素需要升序排怎么办? 如图所示,我这调用的sortby()是List集合的方法了,不是算子,所以不能加false参数指定降序排,只能默认的升序排了,但是用reverse()反转就能达到一样的效果. 或者使用takeRight()方法取后十个也一样,注意的是后十个也是按升序排的…
Spark算子总结 算子分类 Transformation(转换) 转换算子 含义 map(func) 返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成 filter(func) 过滤, 返回一个新的RDD, 该RDD由经过func函数计算后返回值为true的输入元素组成 flatMap(func) 类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素) mapPartitions(func) 类似于map,但独立地在R…
RDD 介绍 spark 最重要的一个概念叫 RDD,Resilient Distributed Dataset,弹性分布式数据集,它是 spark 的最基本的数据(也是计算)抽象. 代码中是一个抽象类,它代表一个 不可变.可分区.里面的元素可并行计算的数据集合. RDD 的属性 拥有一组分区:数据集的基本组成单位 拥有一个计算每个分区的函数 拥有一个分区器,partitioner,即 RDD 的分片函数 RDD 间存在依赖关系 [下面 RDD 特点中有解释] 拥有一个列表,存储每个 parti…
RDD算子调优 不废话,直接进入正题! 1. RDD复用 在对RDD进行算子时,要避免相同的算子和计算逻辑之下对RDD进行重复的计算,如下图所示: 对上图中的RDD计算架构进行修改,得到如下图所示的优化结果: 2. 尽早filter 获取到初始RDD后,应该考虑尽早地过滤掉不需要的数据,进而减少对内存的占用,从而提升Spark作业的运行效率. 本文首发于公众号:五分钟学大数据,欢迎围观 3. 读取大量小文件-用wholeTextFiles 当我们将一个文本文件读取为 RDD 时,输入的每一行都会…
3.5 常见的转化操作和行动操作 3.5.1 基本RDD 1. 针对各个元素的转化操作 两个最常用的转化操作是map()和filter().转化操作map()接受一个函数,把这个函数用于RDD中的每个元素,将函数的返回结果作为结果RDD中对应元素的值.而转化操作filter()则接收一个函数,并将RDD中满足该函数的元素放入新的RDD中返回. inputRDD{1,2,3,4} >>>map x=>x*x >>> Mapped RDD{1,4,9,16} inpu…
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了自己对spark的初步尝试,第二篇更多是局部在spark对于数据库的操作,而本文的思路是从spark最细节的本质,即核心的数据结构RDD出发,到整个Spark集群宏观的调度过程做一个整理归纳,从微观到宏观两方面总结,方便自己在调优过程中找寻问题,理清思路,也加深自己对于分布式程序开发的理解.(有任何…
本章内容: 1.功能描述 本篇文章就要根据源码分析SparkContext所做的一些事情,用过Spark的开发者都知道SparkContext是编写Spark程序用到的第一个类,足以说明SparkContext的重要性:这里先摘抄SparkContext源码注释来简单介绍介绍SparkContext,注释的第一句话就是说SparkContext为Spark的主要入口点,简明扼要,如把Spark集群当作服务端那Spark Driver就是客户端,SparkContext则是客户端的核心:如注释所说…
一.RDD算子补充 1.mapPartitions         mapPartitions的输入函数作用于每个分区, 也就是把每个分区中的内容作为整体来处理.   (map是把每一行) mapPartitions一次处理一个分区的所有数据,而map算子一次处理分区中的一条数据,所以mapPartitions处理数据的速度比map快,如果RDD分区的数据很庞大,用mapPartitions容易造成内存溢出, 如果RDD分区数据量小,从而提升速度的角度考虑,可以使用mapPartitions算子…
TransformationDemo.scala import org.apache.spark.{HashPartitioner, SparkConf, SparkContext} import scala.collection.mutable.ListBuffer object TransformationDemo extends App { val sparkConf = new SparkConf().setMaster("local").setAppName("Tr…