Java spark中的各种范型接口Function的区别(持续更新中)
表格来自[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的区别(持续更新中)相关推荐
- 【中创】壹起共享“免费”网络资源库-持续更新中
想找资源又不知道在哪下载?今天整理分享16个可以免费下载的资源库, 从学习资源,电影,动漫,实用工具,大学考研,软件下载,素材资源,大学资源,网盘资源,网易,极客等...用到的各个类目的课件都能找到, ...
- 精通Java 面试 07题 接口和抽象类的区别 (持续更新中)
文章目录 一.接口和抽象类的区别(方式一) 二.接口和抽象类的区别(方式二) 总结 这里我写了两种回答方式,可以各取所需. 一.接口和抽象类的区别(方式一) 抽象类可以存在普通成员函数,而接口只能存在 ...
- 2020年Java面试题及答案_Java面试宝典_Java笔试题(持续更新中)
推荐面试视频教程 2019年最新Java互联网大厂面试精粹 前言 前言: 少年易老学难成,一寸光阴不可轻.未觉池塘春草梦,阶前梧叶已秋声 .-朱熹<劝学诗> 勤奋才是改变你命运的唯一捷径. ...
- 以下构成python循环结构的方法中_超星尔雅初级英语口语(持续更新中)选修课答案...
套期具有"对冲""互抵"的关系 答:正确 差异化战略核心是企业在市场营销.研究和开发.产品技术和工艺设计以及服务等方面具有强大的实力. 答:正确 以下构成Pyt ...
- 论文中著名会议和期刊的一些介绍(持续更新中)
我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容, ...
- iG/NZT安装使用过程中可能遇到的问题解决办法(根据用户反馈持续更新中...)
问:为什么我无法添加源地址,提示很多黄色英文或者红色英文错误? 答:首先考虑网络问题,这里网络是指连接源地址的网络通畅度,也许你是有网络可以上百度,但是不能添加源地址或者安装软件,这里我推荐使用3G/ ...
- 《Autosar_BSW高阶配置》总目录_培训教程持续更新中...
目录 0 基础"开胃菜"(共20+篇) 0.1 CANFD和Classic CAN介绍 0.2 UDS/OBD诊断网络层/传输层介绍 0.3 常用UDS诊断服务介绍 0.4 所有O ...
- JAVA面试大全(持续更新中...)
本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...
- 面试1:Java、微服务、架构常见面试题(持续更新中)
Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...
最新文章
- android studio 常量表达式错误
- Arm architecture 第一章
- 安装docker和docker-compose
- h.265编码库x265实例
- 算法训练营05-二叉树
- oracle 赋值到cmd,CMD操作oracle数据导库过程图解
- 洛谷 P1852 奇怪的字符串
- Ubuntu中Python3找不到_sqlite3模块
- 通用usb驱动libusb介绍和使用示例
- springboot 对象 空指针_C++ this指针的理解和作用
- http://www.codeproject.com/Questions/117324/upload-file-in-c-with-HttpWebRequest
- 用arp-scan扫描局域网IP地址
- 04_用户注册与自定义数据转换器Conventer
- 网络神偷 v7.6 免费
- 【环境】NVIDIA驱动安装+cuda11.0(ubuntu16.04)
- Oracle11g创建、删除表空间语句
- 适合练习听力的英文电影推荐
- 使用python将txt格式的数据转换为csv格式,读取csv数据前几行
- 数据库系统概论(第五版)王珊 自用复习笔记
- Claymore挖矿软件参数说明
热门文章
- 洛谷 [P1352] 没有上司的舞会
- BZOJ1015 JSOI2008 星球大战starwars 并查集
- linux zeromq
- jstl与struts2 条件语句的区别
- 使用Async同步执行异步函数
- Vue面试题 70道题目及答案
- curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443
- 启动MySQL报错:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)
- 人工机器:jetbot小车密码
- AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)