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

Spark Rdd之mapToPair,flatMapToPair

文章目录

  • spark.api.java
    • mapToPair
    • flatMapToPair
  • spark.api.scala

spark.api.java

mapToPair

此函数会对一个RDD中的每个元素调用f函数,调用f函数后会进行一定的操作把每个元素都转换成一个<K,V>类型的对象

  • 源码
  /**
   * Return a new RDD by applying a function to all elements of this RDD.
   */
  def mapToPair[K2, V2](f: PairFunction[T, K2, V2]): JavaPairRDD[K2, V2] = {
    def cm: ClassTag[(K2, V2)] = implicitly[ClassTag[(K2, V2)]]
    new JavaPairRDD(rdd.map[(K2, V2)](f)(cm))(fakeClassTag[K2], fakeClassTag[V2])
  }
  • demo
val rdd: RDD[String] = sc.makeRDD(Seq("java", "scala", "rdd"))

    val javaPairRdd: JavaPairRDD[String, Int] = rdd.toJavaRDD().mapToPair(f => {
      (f, 1)
    })
    javaPairRdd.foreach(println)
    //(java,1)
    //(scala,1)
    //(rdd,1)

flatMapToPair

函数相对于mapToPair多了个flatMap的功能,它能够将元素拆分后在转换成键值对

  • 源码
  /**
   *  Return a new RDD by first applying a function to all elements of this
   *  RDD, and then flattening the results.
   */
  def flatMapToPair[K2, V2](f: PairFlatMapFunction[T, K2, V2]): JavaPairRDD[K2, V2] = {
    def fn: (T) => Iterator[(K2, V2)] = (x: T) => f.call(x).asScala
    def cm: ClassTag[(K2, V2)] = implicitly[ClassTag[(K2, V2)]]
    JavaPairRDD.fromRDD(rdd.flatMap(fn)(cm))(fakeClassTag[K2], fakeClassTag[V2])
  }
  • demo
 val flatMapPairRdd: JavaPairRDD[String, Int] = rdd.toJavaRDD().flatMapToPair(f => {
      val arrayList = new util.ArrayList[(String, Int)]()
      arrayList.add((f, 1))
      arrayList.iterator()
    })

    flatMapPairRdd.foreach(println)
    //(java,1)
    //(scala,1)
    //(rdd,1)

spark.api.scala

scala 无这两个算子,以下是代替方案(麻烦),建议还是转javaRdd吧
maptoPair = map
flatMapToPair = flatMap + map

相关文章:

  • nodejs项目实例知识信息分享平台
  • Python类和对象怎么使用
  • 【我不熟悉的css 】02. 手动画一个svg图片
  • 一、特征工程
  • 超详细Redis入门教程三
  • 【Go】slice
  • 低码筑梦,扬帆起航|湘潭大学万应低代码实训营圆满结营!
  • 盲盒app系统开发功能介绍
  • Linux中磁盘管理
  • Android Studio无障碍功能
  • 计算机毕业设计 SSM+Vue美容院管理系统 美容护理管理系统 美容店系统管理Java Vue MySQL数据库 远程调试 代码讲解
  • 2022年全球及中国手术感控行业头部企业市场占有率及排名调研报告
  • 我的世界Minecraft基岩版开服服务器教程(Windows)开服器开服包下载开服网站服务器要多少钱开服核心开服端下载
  • 2022年全球及中国叔十二烷基硫醇行业头部企业市场占有率及排名调研报告
  • DM 重做日志文件管理
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017年终总结、随想
  • Apache的基本使用
  • CentOS6 编译安装 redis-3.2.3
  • docker容器内的网络抓包
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • E-HPC支持多队列管理和自动伸缩
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript类型识别
  • Java新版本的开发已正式进入轨道,版本号18.3
  • MySQL几个简单SQL的优化
  • SpringBoot几种定时任务的实现方式
  • 小程序测试方案初探
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • (rabbitmq的高级特性)消息可靠性
  • (分布式缓存)Redis分片集群
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十三)Flask之特殊装饰器详解
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)程序员疫苗:代码注入
  • (转载)hibernate缓存
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core Swagger 过滤部分Api
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net对接阿里云CSB服务
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • [ JavaScript ] JSON方法
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [].slice.call()将类数组转化为真正的数组
  • [100天算法】-x 的平方根(day 61)
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [30期] 我的学习方法
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C++] Windows中字符串函数的种类
  • [hdu 1711] Number Sequence [kmp]