scala
hunter95671
这个作者很懒,什么都没留下…
展开
-
Spark两种持久化及其区别
一、RDD Cache 缓存RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存,默认情况下会把数据以缓存在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的 action 算子时,该 RDD 将会被缓存在计算节点的内存中,并供后面重用。示例:// 数据缓存wordToOneRdd.cache()// 可以更改存储级别mapRdd.persist(StorageLevel.MEMORY_AND_DISK_2)二、RDD CheckPoint 检查点原创 2021-09-25 17:17:31 · 221 阅读 · 0 评论 -
Spark中RDD的依赖关系
一、RDD血缘关系RDD 只支持粗粒度转换,即在大量记录上执行的单个操作,在RDD上的每次操作会生成一个新的RDD。将创建 RDD 的一系列 Lineage(血统)记录下来,以便恢复丢失的分区。RDD 的 Lineage 会记录 RDD 的元数据信息和转换行为,当该 RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。二、RDD 依赖关系所谓的依赖关系,其实就是两个相邻 RDD 之间的关系。三、RDD 的宽依赖与窄依赖宽依赖表示同一个父(上游)RDD 的 Partiti原创 2021-09-20 09:03:30 · 723 阅读 · 0 评论 -
Spark算子groupByKey和reduceByKey区别
从 shuffle 的角度:reduceByKey 和 groupByKey 都存在shuffle的操作,但reduceByKey可以在 shuffle 前对分区内相同 key 的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而groupByKey只是进行分组,不存在数据量减少的问题,reduceByKey性能比较高。从功能的角度:reduceByKey 包含分组和聚合的功能。而GroupByKey 只能分组,不能聚合,所以在分组聚合的场合下,推荐使用reduceByKey,如果仅仅是原创 2021-09-11 13:18:47 · 211 阅读 · 0 评论 -
Spark四种聚合算子的区别
reduceByKey: 相同 key 的第一个数据不进行任何计算,分区内和分区间计算规则相同foldByKey: 相同 key 的第一个数据和初始值进行分区内计算,分区内和分区间计算规则相同aggregateByKey:相同 key 的第一个数据和初始值进行分区内计算,分区内和分区间计算规则可以不相同combineByKey:当计算时,发现数据结构不满足要求时,可以让第一个数据转换结构。分区内和分区间计算规则不相同。案例:def main(args: Array[String]): Unit =原创 2021-09-07 11:29:15 · 387 阅读 · 0 评论 -
Spark RDD转换算子-Key-Value类型总结(2)
一、combineByKey最通用的对 key-value 型 rdd 进行聚集操作的聚集函数(aggregation function)。类似于aggregate(),combineByKey()允许用户返回值的类型与输入不一致。combineByKey:需要三个参数第一个参数表示:将相同Key的第一个数据进行结构转换,实现操作,如:v=>(v,1)第二个参数表示:分区内的计算规则第三个参数表示:分区间的计算规则例子:def main(args: Array[String]): Uni原创 2021-09-04 11:27:56 · 301 阅读 · 0 评论 -
Spark RDD转换算子-Key-Value类型总结(1)
一、partitionBy算子将数据按照指定 Partitioner 重新进行分区。Spark 默认的分区器是 HashPartitioner例子: def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator") val sc = new SparkContext(sparkConf) val rdd =原创 2021-08-31 12:10:35 · 584 阅读 · 0 评论 -
Spark RDD转换算子-双Value类型总结
一、intersection对源 RDD 和参数 RDD 求交集后返回一个新的 RDD交集intersection要求两个数据源数据类型保持一致例子:def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator") val sc = new SparkContext(sparkConf) val rdd1原创 2021-08-29 18:10:59 · 229 阅读 · 0 评论 -
Spark RDD转换算子-Value类型总结(2)
一、groupBy将数据根据指定的规则进行分组, 分区默认不变,但是数据会被打乱重新组合,我们将这样的操作称之为 shuffle。极限情况下,数据可能被分在同一个分区中,一个组的数据在一个分区中,但是并不是说一个分区中只有一个组。例子:将奇数偶数分为两组def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")原创 2021-08-26 21:51:36 · 161 阅读 · 0 评论 -
Spark RDD转换算子-Value类型总结(1)
一、map算子将处理的数据源的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。map的参数为一个函数。在map转换后,分区是不变的。例子:将每个分区的数据都乘以2def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator") val sc = new SparkContext(sparkConf)原创 2021-08-22 16:09:40 · 328 阅读 · 0 评论 -
Scala中的Option类型的作用与使用方法
一、Scala中的Option类型的作用Scala中的Option类型是为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型。在没有值的时候,使用None,它是Option的一个子类;在有值的时候,就用Some来包含这个值,它也是Option的一个子类。二、Scala中Option类型的用法Scala Option(选项)类型用来表示一个值是可选的(有值或无值)。Option[T] 是一个类型为 T 的可选值原创 2021-08-18 13:15:00 · 3134 阅读 · 1 评论