top、take和takeOrdered三种算子都是Spark中的Action操作,当原始数据集太大时,可以采用上述三个算子展示数据,下面分别介绍三个算子:

(1)takeOrdered算子

takeOrdered(num: Int)(implicit ord: Ordering[T]): Array[T]

关于top算子在源码中的解释如下:

 /*** Returns the first k (smallest) elements from this RDD as defined by the specified* implicit Ordering[T] and maintains the ordering. This does the opposite of [[top]].* For example:* {{{*   sc.parallelize(Seq(10, 4, 2, 12, 3)).takeOrdered(1)*   // returns Array(2)**   sc.parallelize(Seq(2, 3, 4, 5, 6)).takeOrdered(2)*   // returns Array(2, 3)* }}}**/

该算子返回RDD中最小的k个元素,其中排序规则用户可以自定义ord。

(2)top算子

top(num: Int)(implicit ord: Ordering[T]): Array[T]

top算子是与takeOrdered算子的相反的操作,该算子返回RDD中的最大的k个元素

查看top源码可以知道,top方法本身是调用了takeOrdered:

 def top(num: Int)(implicit ord: Ordering[T]): Array[T] = withScope {takeOrdered(num)(ord.reverse)}
(3)take算子
take(num: Int): Array[T]

take算子获取RDD中的前num个元素。

/*** Take the first num elements of the RDD. It works by first scanning one partition, and use the* results from that partition to estimate the number of additional partitions needed to satisfy* the limit.*/

---------------------------------------------------------------------------个人实践中遇到的问题----------------------------------------

之所以写这篇博客,是因为自己在使用top和take的过程中遇到了一点问题:

 val reduceRdd: RDD[(String, Double)] = mapRdd.reduceByKey(_+_)val sortRdd: RDD[(String, Double)] = reduceRdd.sortBy(_._2,false)val result: Array[(String, Double)] = sortRdd.take(10)

在上述代码中,我是想获得排序后的前10个元素(即Value最大的前10个元素),使用take即可获得答案;我一开始使用的是top(10),但返回的结果是按照Key排序取出的前10个,应该是默认按照key排序。

Spark核心之top、take和takeOrdered相关推荐

  1. 《深入理解Spark:核心思想与源码分析》——1.2节Spark初体验

    本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第1章,第1.2节Spark初体验,作者耿嘉安,更多章节内容可以访问云栖社区"华章社区"公众号查看 ...

  2. 《深入理解Spark:核心思想与源码分析》——第1章环境准备

    本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第1章环境准备,作者耿嘉安,更多章节内容可以访问云栖社区"华章社区"公众号查看 第1章 环 境 准 ...

  3. 《深入理解Spark:核心思想与源码分析》——3.10节创建和启动ExecutorAllocationManager...

    本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第3章,第3.10节创建和启动ExecutorAllocationManager,作者耿嘉安,更多章节内容可以访问云栖 ...

  4. Spark学习之路---Spark核心概念

    Spark核心概念简介 一个Spark应用都由驱动器程序发起集群上的各种并发操作,一个驱动器程序一般包含多个执行器节点,驱动器程序通过一个SaprkContext对象访问saprk.RDD(弹性分布式 ...

  5. Spark核心RDD详述

    Spark核心RDD Spark的核心: RDD特性: RDD的关键特征: RDD创建方式 温馨提示:工作中已经很少使用RDD,一般直接使用df Spark的核心: Spark任务来说,最终的目标是A ...

  6. 《深入理解Spark:核心思想与源码分析》——1.3节阅读环境准备

    本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第1章,第1.3节阅读环境准备,作者耿嘉安,更多章节内容可以访问云栖社区"华章社区"公众号查看 1 ...

  7. PySpark | Spark3新特性 | Spark核心概念

    文章目录 一.Spark Shuffle 1. HashShuffleManager 2. SortShuffleManager 3. 总结 二.Spark3.0新特性 1. Adaptive Que ...

  8. Spark核心开发者:性能超Hadoop百倍,算法实现仅有其1/10或1/100

    Spark核心开发者:性能超Hadoop百倍,算法实现仅有其1/10或1/100 发表于 2013-04-26 13:42|  113488次阅读| 来源 CSDN|  449 条评论| 作者 王鹏 ...

  9. 【大数据入门核心技术-Spark】(二)Spark核心模块

    目录 一.Spark核心模块 1.SparkCore 2.Spark SQL 3.Spark Streaming 4.Spark MLlib 5.资源调度器(Cluster Manager)

  10. Spark核心编程系列(一)——RDD详解

    目录 Spark核心编程系列--RDD详解(一) RDD概念 RDD与IO之间的关系 RDD的核心属性 RDD执行原理 基础编程 RDD创建 RDD的并行度与分区 参考 Spark核心编程系列--RD ...

最新文章

  1. SpringBoot 自定义starter 保姆级教程(说明+源码+配置+测试)
  2. boost::hana::all用法的测试程序
  3. 苏州中学2021届高考成绩查询,苏州中学排名前十名,2021年苏州中学排名一览表
  4. 用SQL语句向表格中插入数据
  5. 【latex】最后一页 参考文献不平衡 左右不对齐
  6. 实现有意识自主学习的智能程序(1)
  7. mongodb 的命令操作(转)
  8. 老哥,帮我看下这个 0day exploit:安全研究员遭疑似国家黑客社工,有人不幸中招...
  9. 蓝桥杯 ADV-95 算法提高 字符串比较
  10. backbone, AngularJS, EmberJS 简单比较
  11. 使用Lucifer实现自动化渗透测试任务
  12. Android 获取设备SN号
  13. rip的metric策略
  14. html中图片放大镜效果图,HTML5使用不同精度的图片来实现图像放大镜效果
  15. 订单下单成功后如何等待支付成功
  16. 做短视频千万不要错过这5个视频素材网
  17. python抓取google搜索结果
  18. 软件设计师冲刺:临考快速记忆
  19. excel中怎么分级显示
  20. GameObject.Find()能否查找隐藏属性的游戏对象?

热门文章

  1. springboot+教学工作量管理系统 毕业设计-附源码221541
  2. 【计蒜客 - 蓝桥训练】蒜厂年会(循环数列的最大子段和)
  3. postgresql中DROP OWNED BY user_name对普通用户和只读用户的区别
  4. excel打开密码忘记了_行李箱密码忘记了怎么办?教你3招轻松打开
  5. 计算机上如何设置访问密码忘了怎么办,电脑设置的密码忘记了怎么办
  6. ChucK初步(3)
  7. 元宇宙来袭的五个趋势
  8. signature=81fb62f1a0834af294367966aafd9f63,Stability region of K
  9. Stm32学习(基于HAL库)
  10. Android Camera HAL3 - MultiCamera-HALBufferManager