当前位置: 首页 > news >正文

大数据Spark(六十五):Transformation转换算子groupByKey和filter

文章目录

Transformation转换算子groupByKey和filter

一、groupByKey

二、filter


Transformation转换算子groupByKey和filter

一、groupByKey

作用在K,V格式的RDD上,根据Key进行分组,返回(K,Iterable <V>)。对于需要对相同key进行聚合的场景使用reduceByKey更高效,因为reduceByKey会在各个分区中预先进行本地聚合,减少数据传输数量。

Java代码:

SparkConf conf = new SparkConf().setMaster("local").setAppName("GroupByKeyTest");
JavaSparkContext sc = new JavaSparkContext(conf);JavaPairRDD<String, Integer> pairRDD = sc.parallelizePairs(Arrays.asList(new Tuple2<>("a", 1),new Tuple2<>("b", 2),new Tuple2<>("c", 3),new Tuple2<>("a", 4),new Tuple2<>("b", 5),new Tuple2<>("c", 6),new Tuple2<>("a", 7),new Tuple2<>("b", 8),new Tuple2<>("c", 9)));//groupByKey:将数据源中的数据,按照相同的key对value进行分组,形成一个新的可迭代的value
JavaPairRDD<String, Iterable<Integer>> result = pairRDD.groupByKey();
result.foreach(new VoidFunction<Tuple2<String, Iterable<Integer>>>() {@Overridepublic void call(Tuple2<String, Iterable<Integer>> tp) throws Exception {String key = tp._1;Iterable<Integer> values = tp._2;int sum = 0;for (Integer value : values) {sum += value;}System.out.println(key+":"+sum);}
});sc.stop();

Scala代码:

val conf: SparkConf = new SparkConf().setMaster("local").setAppName("GroupByKeyTest")
val sc = new SparkContext(conf)//groupByKey: 将RDD中的元素按照key进行分组
val result: RDD[(String, Iterable[Int])] = sc.parallelize(List(("a", 1), ("b", 2), ("c", 3), ("d", 4), ("a", 5), ("b", 6), ("c", 7), ("d", 8))).groupByKey()result.foreach(tp=>{val key: String = tp._1val values: Iterable[Int] = tp._2.toListvar sum = 0for (value <- values) {sum += value}println(s"key:${key},sum:${sum}")
})sc.stop()

二、filter

过滤符合条件的记录,根据传入的逻辑返回true的数据保留,返回false的数据过滤掉。

案例:过滤数据中长度大于5的字符串。

Java代码:

SparkConf conf = new SparkConf();
conf.setMaster("local");
conf.setAppName("filter");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> rdd1 = sc.parallelize(Arrays.asList("zhangsan", "lisi", "wangwu", "maliu"));
// filter:过滤长度大于5的字符串
JavaRDD<String> rdd2 = rdd1.filter(new Function<String, Boolean>() {@Overridepublic Boolean call(String s) throws Exception {return s.length() > 5;}
});
rdd2.foreach(s -> System.out.println(s));
sc.stop();

Scala代码:

val conf = new SparkConf().setMaster("local").setAppName("filter")
val sc = new SparkContext(conf)//filter:过滤长度大于5的字符串
val rdd: RDD[String] = sc.parallelize(Array("zhangsan", "lisi", "wangwu", "maliu"))
rdd.filter(str=>{str.length > 5}).foreach(println)
sc.stop()

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
http://www.dtcms.com/a/431491.html

相关文章:

  • sward入门到实战(11) - 如何有效保障文档的安全可靠
  • Qt---尺寸调整函数汇总
  • Linux 命令:nohup
  • 网站怎么制作做泉州互联网公司排名
  • 做ppt软件怎么下载网站电商网站系统建设考试
  • AI行业应用全景:从金融风控到智能制造的落地实践与技术解析
  • 公司网站怎么建立需要多少钱北京太阳宫网站建设
  • java线上问题排查-Java 进程CPU高
  • Vala编程语言高级特性-弱引用和所有权
  • Java反射和注解
  • 个人网站导航html源码哪家网站推广好
  • CentOS 7 网络连接问题
  • wordpress国内主题昆山网站优化建设
  • 宁波网站建设大概要多少钱宿州市做网站建设的公司
  • php快速建站工具网站建设策划书的心得
  • 机关公文写作网站公众号制作开发公司
  • ASM Bytecode Viewer 插件查看kotlin和java文件的字节码
  • 公司都是自己制作网站网站如何减少404跳转
  • 链表转置算法
  • 【linux】多线程
  • C语言之详解操作符
  • 2003 您的安全设置不允许网站使用安装网站建设中源码下载
  • 如何做自己的网站系统怎样制作一个app软件
  • 网站建设 要学多久产品推广渠道有哪些
  • 【Linux】进程控制(一) 进程创建、终止与等待概念与实战讲解
  • 【C++】——new和delete与malloc和free的区别
  • MD5的应用与实现
  • php做网站很快嘛竞价代运营厂家
  • 运维自动化之 Ansible 核心知识点总结
  • 高频基础面试题解析:字符串操作、数字运算、条件循环