sample(withReplacement : scala.Boolean, fraction : scala.Double,seed scala.Long)

sample算子时用来抽样用的,其有3个参数

withReplacement:表示抽出样本后是否在放回去,true表示会放回去,这也就意味着抽出的样本可能有重复

fraction :抽出多少,这是一个double类型的参数,0-1之间,eg:0.3表示抽出30%

seed:表示一个种子,根据这个seed随机抽取,一般情况下只用前两个参数就可以,那么这个参数是干嘛的呢,这个参数一般用于调试,有时候不知道是程序出问题还是数据出了问题,就可以将这个参数设置为定值

================================================================================

下面是代码:

大概思路是:通过抽样取出一部分样本,在对样本做wordCount并排序最后取出出现次数最多的key,这个key就是导致数据倾斜的key

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Day05 {public static void main(String[] args) {SparkConf conf = new SparkConf().setMaster("local[2]").setAppName("Day05");JavaSparkContext jsc = new JavaSparkContext(conf);List<String> keys = getKeyBySample(jsc);System.out.println("导致数据倾斜的key是:"+keys);jsc.stop();}/*** 通过Sample算子进行抽样并把导致数据倾斜的key找出来* 然后可以做对计算做针对性的优化* @param jsc*/public static List<String> getKeyBySample(JavaSparkContext jsc){List<String> data = Arrays.asList("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","C","D","E","F","G");JavaRDD<String> rdd =  jsc.parallelize(data,2);List<Tuple2> item =rdd.mapToPair(x->new Tuple2<String,Integer>(x,1)).sample(true,0.4).reduceByKey((x,y)->x+y).map(x->new Tuple2(x._2,x._1)).sortBy(x->x._1,false,2).take(3);List<String> keys = new ArrayList<>();System.out.println("keys="+item);for(int i=0;i<item.size();i++){if(i == item.size()-1)break;Tuple2 current = item.get(i);Tuple2 next = item.get(i+1);Integer v1 = Integer.parseInt(current._1.toString());Integer v2 = Integer.parseInt(next._1.toString());System.out.println(v1+"   "+v2);/*** 这儿的逻辑有问题,找出导致数据倾斜的key的方式和具体的业务也有关系* 这里只是给了一个简单的判断方法,很有局限性*/if(v1/v2 >= 3){System.out.println("===");keys.add(current._2.toString());}}return keys;}
}

---------------------

原文:https://blog.csdn.net/lyzx_in_csdn/article/details/79948799 

关于spark的sample()算子参数详解相关推荐

  1. Spark SQL原理及常用方法详解(二)

    Spark SQL 一.Spark SQL基础知识 1.Spark SQL简介 (1)简单介绍 (2)Datasets & DataFrames (3)Spark SQL架构 (4)Spark ...

  2. Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解

    Lesson 8.3 ID3.C4.5决策树的建模流程 ID3和C4.5作为的经典决策树算法,尽管无法通过sklearn来进行建模,但其基本原理仍然值得讨论与学习.接下来我们详细介绍关于ID3和C4. ...

  3. oracle imp 1403,Oracle中用exp/imp命令参数详解【转】

    Oracle中用exp/imp命令参数详解 [用 exp 数 据 导 出]: 1  将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中 expsyste ...

  4. 04_Flink-HA高可用、Standalone集群模式、Flink-Standalone集群重要参数详解、集群节点重启及扩容、启动组件、Flink on Yarn、启动命令等

    1.4.Flink集群安装部署standalone+yarn 1.4.1.Standalone集群模式 1.4.2.Flink-Standalone集群重要参数详解 1.4.3.集群节点重启及扩容 1 ...

  5. matlab melbankm,Matlab v_melbankm函数参数详解(英文附例)

    Matlab v_melbankm函数参数详解(英文附例) 笔者使用的是R2019的matlab,下载了voicebox安装至matlab路径下即可使用.下载voicebox请参看此博客 需要注意的是 ...

  6. Spark: sortBy和sortByKey函数详解

    在很多应用场景都需要对结果数据进行排序,Spark中有时也不例外.在Spark中存在两种对RDD进行排序的函数,分别是 sortBy和sortByKey函数.sortBy是对标准的RDD进行排序,它是 ...

  7. 【学习笔记】sed 命令及参数详解

    sed 命令及参数详解 标签:Sed 文章目录 sed 命令及参数详解 一.简介 二.基本用法 2.1. 三种方式 2.2. 常用选项 2.3. 命令体的组成 2.3.1. 定位文本部分 2.3.2. ...

  8. 阿里云AMD服务器ECS实例g6a、c6a和r6a性能参数详解

    阿里云AMD服务器ECS计算型c6a.通用型g6a和内存型r6a实例,CPU采用2.6GHz主频的AMD EPYCTM ROME处理器,睿频3.3GHz,计算性能稳定,云服务器吧来详细说下阿里云ECS ...

  9. Matlab mfcc函数参数详解(英文附例)

    Matlab mfcc函数参数详解 其实可以直接打开源代码看哈. %MFCC Extract the mfcc, log-energy, delta, and delta-delta of audio ...

最新文章

  1. 引号快捷键_干货收藏|excel2016常用快捷键
  2. Windows Phone 用WebBrowser加载HTML页面
  3. 容器编排技术 -- Kubernetes 给容器和Pod分配CPU资源
  4. fb50 sap 报记账码未定义_XX项目SAP关键用户培训固定资产
  5. Run Book Automation - RBA开发系列一
  6. Android/Linux线程死锁demo分析
  7. php之thinkphp3.2.3 文件访问路径,URL路由配置-与重定向
  8. python xml etree_Python 标准库之 xml.etree.ElementTree
  9. 求链表是否有环,及环入口,环长度
  10. 平面判断两点连线是否交叉
  11. JMeter下载安装
  12. smart3D的初探索
  13. python如何爬有道翻译_python 爬有道翻译
  14. 【雅思大作文考官范文】——第十一篇:'homework' essay
  15. WINDOWS远程连接显示“请稍后”
  16. Python之输入一个年份判断该年是否是闰年
  17. 我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》
  18. 阿里云服务器ECS 第三篇:Oracle 数据库环境搭建
  19. (不带头结点的)单链表增删查改,逆置单链表(两种方法),求两个单链表的第一个公共结点,合并两个单链表,单循环链表中判断第一个入环点,约瑟夫环
  20. 一文深度解读音视频行业技术发展历程

热门文章

  1. 基于Mono和VSCode打造轻量级跨平台IDE
  2. 28.inline-block使用,缝隙,对齐
  3. ninja VS cmake
  4. C语言写计算器(最多只可实现浮点型带一层括号的混合运算)
  5. 输入一个成绩,根据输入的成绩判断成绩的等级,比如输入成绩95,输出结果为:你输入的成绩为“优”。
  6. ubuntu18.04安装x11vnc远程登录并设置开机自启
  7. 安卓多点触控之getAction()和getActionMasked()的区别
  8. java 三点定位_iBeacon定位-三点定位实现
  9. 漫谈万维网的华丽史诗:Web3.0是技术金矿 还是郁金香泡沫?
  10. 【论文简述】目标检测:FCOS(2019)