Spark
未来影子
曾先后在百度、理想、快手参与研发工作
后端、大数据、NLP学习者
展开
-
Spark精简面试
Spark的使用场景大数据场景主要有以下几种类型:针对以上情况,不用Spark来处理的框架如下:使用Spark处理:Spark的四种部署模式本地:将Spark应用以多线程的方式直接运行在本地,一般是为了方便调试。本地模式分为三类locak:启动一个executorlocal[k]:启动k个executorlocal[*]:启动跟CPU数目相同的executorstandalone:分布式部署集群,自带完整的服务,资源、任务监控由spark管理,这个模式也是其他模式的基础Spark o原创 2022-06-21 21:25:27 · 373 阅读 · 0 评论 -
WordCount案例实现的11种方法
WordCount实现的11种方法import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}import scala.collection.mutableobject Spark04_WordCount { def main(args: Array[String]): Unit = { val sparConf = new SparkConf().setMaster("local原创 2022-03-21 19:02:31 · 987 阅读 · 0 评论 -
案例实操-Top10热门品类
需求1:分别统计每个品类的点击次数,下单次数和支付次数(品类,点击总数)(品类,下单总数)(品类,支付总数)排名顺序如:点击总数>下单总数>支付总数方案一def main(args: Array[String]): Unit = { //TODO : TOP10热门品类 val sparkConf = new SparkConf().setMaster("local[*]").setAppName("HotCategoryTop10Analysis") val原创 2022-03-08 22:20:16 · 709 阅读 · 0 评论 -
RDD累加器
累加器实现原理 累加器是用来把Executor端变量信息聚合到Driver端。在Driver程序中定义的变量,在Executor端的每个Task都会得到这个变量的一份新的副本,每个task更新每个task更新这些副本的值后,传回Driver端进行merge系统累加器val rdd = sc.makeRDD(List(1,2,3,4,5))// 声明累加器var sum = sc.longAccumulator("sum");rdd.foreach( num => { // 使用累加原创 2022-03-08 22:19:43 · 362 阅读 · 0 评论 -
RDD广播变量
广播变量实现原理 广播变量用来高效分发较大的对象。向所有工作节点发生一个较大的只读值,以供一个或多个Spark操作使用。比如,如果你得应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。在多个并行操作中使用同一个变量,但是Spark会为每个任务分别发送。编程基础 def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster("local").setAppName("W原创 2022-03-08 22:19:21 · 1301 阅读 · 0 评论 -
RDD转换算子
RDD根据数据处理方式的不同将算子整体上分为Value类型、双Value类型和Key-Value类型文章目录Value类型mapmapPartitions思考题:map和mapPartitions的区别?mapPartitionsWithIndexflatMapglomgroupByfiltersampledistinctcoalescerepartitionsortBy双Value类型intersectionunionsubtractzipKey-Value类型partitionByreduceByKe原创 2022-03-08 22:18:38 · 84 阅读 · 0 评论 -
RDD依赖关系
1)RDD血缘关系RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。命令:toDebugString2)RDD依赖关系两个相邻RDD之间的关系3)RDD窄依赖窄依赖表示每一个父(上游)RDD的Partition最多被子(下游)RDD的一个Partition使用。窄依赖可以形象的比喻原创 2022-03-08 22:18:21 · 1194 阅读 · 0 评论 -
RDD序列化
1)闭包检查 从计算的角度,算子以外的代码都是在Driver端执行,算子里面的代码都是在Executor端执行。那么在scala的函数式编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给Executor端执行,就会发生错误,所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测。Scala2.12版本后闭包编译方式发生了改变2)序列化方法和属性 从计算的角度,算子以外的代码都是在Driver端原创 2022-03-08 22:17:28 · 181 阅读 · 0 评论 -
RDD行动算子
reduce函数签名:def reduce(f: (T, T) => T): T函数说明:聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据collect函数签名;def collect(): Array[T]函数说明:在驱动程序中,以数组Array的形式返回数据集的所有元素count函数签名:def count(): Long函数说明:返回RDD中元素的个数first函数签名:def first(): T函数说明:返回RDD中的第一个元素原创 2022-03-08 22:16:57 · 131 阅读 · 0 评论 -
RDD文件读取与保存
Spark的数据读取以及数据保存可以从两个维度来作区分:文件格式以及文件系统。文件格式为:text文件、csv文件、sequence文件以及Object文件;文件系统为:本地文件系统、HDFS、HBASE以及数据库text文件读文件:textFile存文件:saveAsTextFilesequence文件SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)存文件:saveAsSequenceFile(“output原创 2022-03-08 22:16:25 · 1413 阅读 · 0 评论 -
RDD分区器
Spark目前支持Hash分区和Range分区,和用户自定义分区。Hash分区为当前的默认分区,分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle后进入哪个分区,进而决定了Reduce的个数。只有Key-Value类型的RDD才有分区器,非Key-Value类型的RDD分区的值是None每个RDD的分区ID范围:0~(numPartitions - 1),决定这个值是属于哪个分区的1)Hash分区对于给定的key,计算其hashCode,并除以分区个数取余 cla原创 2022-03-08 22:15:49 · 1216 阅读 · 0 评论 -
RDD持久化
1)RDD Cache缓存 RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据以缓存在JVM的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的action算子时,该RDD将会被缓存计算节点的内存中,并供后面重用。 缓存有可能丢失,或者存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD的一系列转换,丢失的数据会被重算,由于RD的各个Partition是相对独立的,因此只需要计算丢失的部分原创 2022-03-08 22:15:16 · 1534 阅读 · 0 评论