表格来自[2]

Class Function Type
Function<T, R> T => R
DoubleFunction<T> T => Double
PairFunction<T, K, V> T => Tuple2<K, V>
FlatMapFunction<T, R> T => Iterable<R>
DoubleFlatMapFunction<T> T => Iterable<Double>
PairFlatMapFunction<T, K, V> T => Iterable<Tuple2<K, V>>
Function2<T1, T2, R> T1, T2 => R (function of two arguments)

#------------------------------------------Function2用法---------------------------------------------------------------------------------------------

private static Function2 <Long, Long,Long> func2=new Function2<Long,Long,Long>()
{ private static final long serialVersionUID = 1L;

public Long call(Long v1, Long v2) throws Exception
    {
        return v1+v2;
    }

};

// 第二步,对打上随机前缀的key进行局部聚合。(调用)
        JavaPairRDD<String, Long> localAggrRdd = randomPrefixRdd.reduceByKey(func2);
        System.out.println("------------第2步-----localAggrRdd ----------------------");
        System.out.print(localAggrRdd.collect());
        System.out.println();

#--------------------------------------------------------PairFunction用法-----------------------------------------------------------------------------------------

        // 首先将数据量比较小的RDD的数据,collect到Driver中来。List<Tuple2<Long,String>> rdd1Data = rdd1.collect();// 然后使用Spark的广播功能,将小RDD的数据转换成广播变量,这样每个Executor就只有一份RDD的数据。
// 可以尽可能节省内存空间,并且减少网络传输性能开销。final Broadcast<List<Tuple2<Long, String>>> rdd1DataBroadcast = sc.broadcast(rdd1Data);// 对另外一个RDD执行map类操作,而不再是join类操作。JavaPairRDD<Long, Tuple2<String, String>> joinedRdd = rdd2.mapToPair(new PairFunction<Tuple2<Long, String>, Long, Tuple2<String, String>>(){private static final long serialVersionUID = 1L;//                    下面左侧是返回的类型,右侧是输入的数据类型@Overridepublic Tuple2<Long, Tuple2<String, String>> call(Tuple2<Long, String> tuple) throws Exception{// 在算子函数中,通过广播变量,获取到本地Executor中的rdd1数据。List<Tuple2<Long, String>> rdd1Data = rdd1DataBroadcast.value();// 可以将rdd1的数据转换为一个Map,便于后面进行join操作。Map<Long, String> rdd1DataMap = new HashMap<Long, String>();for (Tuple2<Long, String> data : rdd1Data){rdd1DataMap.put(data._1, data._2);}// 获取当前RDD数据的key以及value。Long   key   = tuple._1;String value = tuple._2;// 从rdd1数据Map中,根据key获取到可以join到的数据。String rdd1Value = rdd1DataMap.get(key);return new Tuple2<Long, Tuple2<String, String>>(key, new Tuple2<String, String>(value, rdd1Value));}});

针对上面纷繁复杂的函数类型我们可以分析得到下面的规律(很多变量类型都是抄来抄去)

#---------------------------------------------------------------------------------------------------------------------------------------------

Reference:

[1]Spark的Java API例子详解

[2]Function Classes

Java spark中的各种范型接口Function的区别(持续更新中)相关推荐

  1. 【中创】壹起共享“免费”网络资源库-持续更新中

    想找资源又不知道在哪下载?今天整理分享16个可以免费下载的资源库, 从学习资源,电影,动漫,实用工具,大学考研,软件下载,素材资源,大学资源,网盘资源,网易,极客等...用到的各个类目的课件都能找到, ...

  2. 精通Java 面试 07题 接口和抽象类的区别 (持续更新中)

    文章目录 一.接口和抽象类的区别(方式一) 二.接口和抽象类的区别(方式二) 总结 这里我写了两种回答方式,可以各取所需. 一.接口和抽象类的区别(方式一) 抽象类可以存在普通成员函数,而接口只能存在 ...

  3. 2020年Java面试题及答案_Java面试宝典_Java笔试题(持续更新中)

    推荐面试视频教程 2019年最新Java互联网大厂面试精粹 前言 前言: 少年易老学难成,一寸光阴不可轻.未觉池塘春草梦,阶前梧叶已秋声 .-朱熹<劝学诗> 勤奋才是改变你命运的唯一捷径. ...

  4. 以下构成python循环结构的方法中_超星尔雅初级英语口语(持续更新中)选修课答案...

    套期具有"对冲""互抵"的关系 答:正确 差异化战略核心是企业在市场营销.研究和开发.产品技术和工艺设计以及服务等方面具有强大的实力. 答:正确 以下构成Pyt ...

  5. 论文中著名会议和期刊的一些介绍(持续更新中)

    我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容, ...

  6. iG/NZT安装使用过程中可能遇到的问题解决办法(根据用户反馈持续更新中...)

    问:为什么我无法添加源地址,提示很多黄色英文或者红色英文错误? 答:首先考虑网络问题,这里网络是指连接源地址的网络通畅度,也许你是有网络可以上百度,但是不能添加源地址或者安装软件,这里我推荐使用3G/ ...

  7. 《Autosar_BSW高阶配置》总目录_培训教程持续更新中...

    目录 0 基础"开胃菜"(共20+篇) 0.1 CANFD和Classic CAN介绍 0.2 UDS/OBD诊断网络层/传输层介绍 0.3 常用UDS诊断服务介绍 0.4 所有O ...

  8. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  9. 面试1:Java、微服务、架构常见面试题(持续更新中)

    Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...

最新文章

  1. android studio 常量表达式错误
  2. Arm architecture 第一章
  3. 安装docker和docker-compose
  4. h.265编码库x265实例
  5. 算法训练营05-二叉树
  6. oracle 赋值到cmd,CMD操作oracle数据导库过程图解
  7. 洛谷 P1852 奇怪的字符串
  8. Ubuntu中Python3找不到_sqlite3模块
  9. 通用usb驱动libusb介绍和使用示例
  10. springboot 对象 空指针_C++ this指针的理解和作用
  11. http://www.codeproject.com/Questions/117324/upload-file-in-c-with-HttpWebRequest
  12. 用arp-scan扫描局域网IP地址
  13. 04_用户注册与自定义数据转换器Conventer
  14. 网络神偷 v7.6 免费
  15. 【环境】NVIDIA驱动安装+cuda11.0(ubuntu16.04)
  16. Oracle11g创建、删除表空间语句
  17. 适合练习听力的英文电影推荐
  18. 使用python将txt格式的数据转换为csv格式,读取csv数据前几行
  19. 数据库系统概论(第五版)王珊 自用复习笔记
  20. Claymore挖矿软件参数说明

热门文章

  1. 洛谷 [P1352] 没有上司的舞会
  2. BZOJ1015 JSOI2008 星球大战starwars 并查集
  3. linux zeromq
  4. jstl与struts2 条件语句的区别
  5. 使用Async同步执行异步函数
  6. Vue面试题 70道题目及答案
  7. curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443
  8. 启动MySQL报错:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)
  9. 人工机器:jetbot小车密码
  10. AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)