首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Spark中mapToPair和flatMapToPair的区别【附示例源码及运行结果】

  • 25-03-07 20:02
  • 4148
  • 10668
blog.csdn.net

本文重点介绍 Spark 中 【mapToPair】和【flatMapToPair】的区别,请继续看到尾部,后续有示例说明,会理解更加清晰。

函数原型

1.JavaPairRDD mapToPair(PairFunction f)

此函数会对一个RDD中的每个元素调用f函数,其中原来RDD中的每一个元素都是T类型的,调用f函数后会进行一定的操作把每个元素都转换成一个类型的对象

2.JavaPairRDD flatMapToPair(PairFlatMapFunction f)

此函数对对一个RDD中的每个元素(每个元素都是T类型的)调用f函数,通过f函数可以将每个元素转换为类型的元素,然后比mapToPair方法多了一个flat操作,将所有的类型的元素合并成为一个Iterable>类型的对象。

使用说明

在使用时mapToPair会将一个长度为N的、每个元素都是T类型的对象,转换成另一个长度为N的、每个元素都是类型的对象;而flatMapToPair会在map的基础上进行一个flatten操作,即将所有的元素合并到一个Iterable<>类型的集合中。

大白话说明

spark 分析的数据是基于一行行,类似于数据库的一条条记录那样。所以,我们可以理解为:

  1. map 是一条记录变一条记录的转换操作;适用于数据格式转换
  2. flatMap 是一条记录变多条记录的转换操作;适用于数据格式拆分同时进行数据转换

话不多说,直接上示例代码,如下:

JAVA 版本:

  1. package com.java.spark_core.transform;
  2. import org.apache.log4j.Level;
  3. import org.apache.log4j.Logger;
  4. import org.apache.spark.SparkConf;
  5. import org.apache.spark.api.java.JavaRDD;
  6. import org.apache.spark.api.java.JavaSparkContext;
  7. import java.util.Arrays;
  8. public class Java_Spark02_Oper1_mapVsflatmap {
  9. public static void main(String[] args) {
  10. Logger.getLogger("org").setLevel(Level.WARN);
  11. // var config: SparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
  12. SparkConf config = new SparkConf().setMaster("local[*]").setAppName("map");
  13. // 创建 Spark上下文对象
  14. // var sc: SparkContext = new SparkContext(config)
  15. JavaSparkContext sc = new JavaSparkContext(config);
  16. JavaRDD listRDD = sc.parallelize(Arrays.asList("hello world", "hello spark"));
  17. // 所有RDD里的算子都是由 Executor 进行执行
  18. // map 算子
  19. System.out.println("=【map】操作 及 map操作结果打印 =======================");
  20. JavaRDD mapRDD = listRDD.map(t -> t + "_1");
  21. mapRDD.collect().forEach(System.out::println);
  22. // flatMap 算子
  23. System.out.println("=【flatMap】操作 及 flatMap操作结果打印 =======================");
  24. JavaRDD wordRdd = listRDD.flatMap(line -> Arrays.asList(line.split(" ")).iterator());
  25. wordRdd.collect().forEach(System.out::println);
  26. sc.close();
  27. }
  28. }

Scala 版本:

  1. package com.scala.spark_core.transform
  2. import org.apache.log4j.{Level, Logger}
  3. import org.apache.spark.rdd.RDD
  4. import org.apache.spark.{SparkConf, SparkContext}
  5. object Spark02_Oper1_mapVsflatmap {
  6. def main(args: Array[String]): Unit = {
  7. Logger.getLogger("org").setLevel(Level.WARN)
  8. var config: SparkConf = new SparkConf().setMaster("local[*]").setAppName("map")
  9. // 创建Spark上下文对象
  10. var sc: SparkContext = new SparkContext(config)
  11. // map算子
  12. var listRDD: RDD[String] = sc.makeRDD(Array("hello world", "hello spark"))
  13. // 所有RDD里的算子都是由 Executor 进行执行
  14. // map 算子
  15. System.out.println("=【map】操作 及 map操作结果打印 =======================")
  16. val mapRDD: RDD[String] = listRDD.map(_ + "_1")
  17. mapRDD.collect().foreach(println)
  18. // flatMap 算子
  19. System.out.println("=【flatMap】操作 及 flatMap操作结果打印 =======================")
  20. val wordRDD: RDD[String] = listRDD.flatMap(_.split(" "))
  21. wordRDD.collect().foreach(println)
  22. }
  23. }

示例代码运行结果截图如下:


文章最后,给大家推荐一些受欢迎的技术博客链接:

  1. Hadoop相关技术博客链接
  2. Spark 核心技术链接
  3. JAVA相关的深度技术博客链接
  4. 超全干货--Flink思维导图,花了3周左右编写、校对
  5. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  6. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  7. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

注:本文转载自blog.csdn.net的不埋雷的探长的文章"https://blog.csdn.net/weixin_32265569/article/details/83447899"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top