Top N 算法

Top N算法
本期内容:
    1、基础Top N 算法
    2、分组Top N算法
    3、排序算法 RangePartition
Top N(首先实现排序算法,一般否较为复杂),分组Top N 常见的算法。
(只要是改变每一行列的数据,一般都是用Map操作)
/**
  * Created by css-kxr on 2016/1/25.
  * 基础Top N算法的实现
  */
object TopNBasic {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("SecondarySortApp").setMaster("local") //创建SparkConf,初始化程序的配置
    val sc = new SparkContext(conf) //创建SparkContext,这是第一个RDD创建的唯一入口,也是Driver的灵魂,是通往集群的唯一通道
    val lines = sc.textFile("C:\\Users\\css-kxr\\Music\\Big_Data_Software\\spark-1.6.0-bin-hadoop2.6\\Hello.txt")
    val pairs = lines.map(line  =>(line.toInt,line))//生成key,value以方便sortByKey进行排序,因为textFile后得到的是字符串,Int已经实现了排序比较的接口
    val sortedByKey = pairs.sortByKey(false)
    val sortedData = sortedByKey.map(pair => pair._2).distinct //过滤排序的内容,若需要不同值,可以通过distinct过滤
    val top5 = sortedData.take(5)  //take到前5个元素,构建成为一个Array,所以不需要用collect,直接foreach
    top5.foreach(println)
  }
}
RangePartitioner主要是依赖的RDD的数据划分成不同的范围,关键的地方是不同的范围是有许多, RangePartitioner会产生水塘抽样(适合内存无法容纳数据的情况),除了其为结果数据有序的基石,最为重要的是尽量保证每个Partition中的数据量是均匀的!!!
val sampleSizePerPartition = math.ceil(3.0 * sampleSize / rdd.partitions.size).toInt
乘3的目的保证数据量特别小的分区能够抽取到足够的数据,同时保证数据量特别大的分区能够二次采样。
(Long, Array[(Int, Long, Array[K])]) //<span style="font-family: Helvetica, 'Hiragino Sans GB', 微软雅黑, 'Microsoft YaHei UI', SimSun, SimHei, arial, sans-serif; font-size: 15px; line-height: 24px; widows: auto;">编号、数据数、从RDD采样的数据数组</span>
HashPartitioner弊端是数据倾斜。导致每个分区数据非常不均匀,极端情况下,某个分区拥有RDD的所有数据,集群计算资源不均匀。



跟随王家林老师的零基础讲解,注重动手实战,成为spark高手,笑傲大数据之林!
王家林老师是大数据技术集大成者,中国Spark第一人:

DT大数据梦工厂

新浪微博:www.weibo.com/ilovepains/

微信公众号:DT_Spark

博客:http://.blog.sina.com.cn/ilovepains

TEL:18610086859

Email:18610086859@vip.126.com


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值