1. spark 1.x 升级到spark 2.x
对于普通的spark来说,变动不大 :
1
举一个最简单的实例:spark1.x
public static JavaRDD<String> workJob(JavaRDD<String> spark1Rdd) {JavaPairRDD<String, Integer> testRdd = spark1Rdd.flatMapToPair(new PairFlatMapFunction<String, String, Integer>() {@Overridepublic Iterable<Tuple2<String, Integer>> call(String str)throws Exception {ArrayList<Tuple2<String, Integer>> list = new ArrayList<>();return list;}});return spark1Rdd;}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spark2.x
public static JavaRDD<String> workJob(JavaRDD<String> spark2Rdd) {JavaPairRDD<String, Integer> testRdd2 = spark2Rdd.flatMapToPair(new PairFlatMapFunction<String, String, Integer>() {@Overridepublic Iterator<Tuple2<String, Integer>> call(String str)throws Exception {ArrayList<Tuple2<String, Integer>> list = new ArrayList<>();return list.iterator();}});return spark2Rdd;}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
需要说明的是:
上面的返回的rdd就直接用输入的 RDD显然是不合理的! 只是为了用最简洁的方式介绍代码的转换而已!可以看到 : 区别主要在于
1. spark 1.x中的Iterable对象 变成了 spark2.x中的Iterator对象
2. 相应的,对于返回值为list的RDD,  spark2.x中要返回list.iterator();
1
2
3
还是很简单的吧问题在于 : 如果你有几个spark程序要运行在不同的环境下,(有的现场用1.x,有的现场用2.x)
你需要同时维护两种不同版本的spark,是不是耗时又耗力呢?这个时候就需要考虑到 spark版本的兼容性,使你的程序能成功的运行在各种集群环境下2. spark版本的兼容
写一个简单的工具类如下 :import java.util.Iterator;public class MyIterator<T> implements Iterator, Iterable
{private Iterator myIterable;public MyIterator(Iterable iterable){myIterable = iterable.iterator();}@Overridepublic boolean hasNext() {return myIterable.hasNext();}@Overridepublic Object next() {return myIterable.next();}@Overridepublic void remove() {myIterable.remove();}@Overridepublic Iterator iterator() {return myIterable;}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
只需要进行如上设计就可以实现版本的兼容了
那么应该如何应用呢?JavaRDD<String> flatMapRDD = lines.flatMap(new FlatMapFunction<String, String>() {@Overridepublic MyIterator<String> call(String s) throws Exception {String[] split = s.split("\\s+");MyIterator myIterator = new MyIterator(Arrays.asList(split));return myIterator;}
});

  

转载于:https://www.cnblogs.com/huiandong/p/9982516.html

spark1.x和2.xIterable和iterator兼容问题相关推荐

  1. 184_刘发顺_Java核心编程

    Java核心编程 Java 技术栈: Java基础 Java面向对象:Java 是一种面向对象的语言,它对对象中的类.对象.继承.封装.多态.接口.包等均有很好的支持.为了简单起见,Java 只支持类 ...

  2. 设计模式之迭代器模式(Iterator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. php 变更 obj,PHP: 不向后兼容的变更 - Manual

    不向后兼容的变更 PHP 核心中不向后兼容的变更 以数组形式访问非数组 尝试以数组方式访问 null,bool, int,float 或 resource (例如 $null["key&qu ...

  4. 让你的容器兼容STL

    大家知道,STL最最主要,也是最最常用的部分就是泛型容器和范型算法.而联系起这两大部分的,就是iterator(迭代器). 迭代器大体分为这么几类(级别从低到高) 只读迭代器input_iterato ...

  5. Python 2 和 3 的区别及兼容技巧

    目录 文章目录 目录 前言 Python 2 or 3 ? Python Future 的兼容性 __future__ Module future Package 统一不等于语法 统一整数类型 统一整 ...

  6. java 中iterator 和 collection接口源码

    iterator接口和具体的容器中实现的iterator 对象(以ArrayList为例) iterator: public interface Iterator<E> {boolean ...

  7. Spark1.0.0 属性配置

    1:Spark1.0.0属性配置方式 Spark属性提供了大部分应用程序的控制项,而且能够单独为每一个应用程序进行配置. 在Spark1.0.0提供了3种方式的属性配置: SparkConf方式 Sp ...

  8. STL源码剖析 迭代器iterator的概念 和 traits编程技法

    iterator模式定义如下:提供一种方法,使之能够依序巡访某个 聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式. STL的中心思想在于:将数据容器(containers)和算法(a ...

  9. k3B软件下载_优麒麟20.10发布:简约、众智、兼容Windows有戏_办公软件

    2020-10-23 23:15:16102点赞43收藏31评论 本文经快科技授权发布,原标题:优麒麟发布:简单之美.兼容Windows有戏,文章内容仅代表作者观点,与本站立场无关,未经允许请勿转载. ...

最新文章

  1. 学到了!程序员大神用这招让开发效率直接提升 10 倍!!
  2. iOS 开发者必不可少的 75 个工具
  3. 《SAS编程与数据挖掘商业案例》学习笔记之十八
  4. 在实时操作系统里随便写代码都能硬实时吗?
  5. 我想说:工作没那么难找吧
  6. java定义一个course类,java集合,定义两个类,学生Student和课程Course,课程被学生选修,请在课程类中提供以下功能:...
  7. LightOJ 1013 LCS+记忆化搜索
  8. java IO 笔记
  9. 统一沟通-技巧-10-Lync-公网证书-Go Daddy-Buy
  10. 在线教你图像分辨率怎么调整?
  11. 程序员节日快乐用c语言表达,祝程序员们节日快乐!
  12. 如何绕过强制门户——克隆 MAC 地址
  13. PowerPoint超链接字体颜色修改、怎么去掉超链接下划线
  14. 你们都出去玩吧,我选择宅在家里「憋文章」
  15. 河南省iscc2019线下(hnciscn)Misc
  16. mysql免安装版设置开机启动
  17. 【Python】 标准差计算(std)
  18. 二维vector的输入
  19. MyBatis源码简单分析
  20. [bzoj4833][数论][min-max容斥]最小公倍佩尔数

热门文章

  1. c++语言中,vector容器与list容器的区别和联系?_百度知道
  2. 支付宝Payto接口的c#.net实现
  3. 快速了解Kubernetes微服务中的通信
  4. 今日头条反爬措施形同虚设,论多平台协同在安全方面的重要性
  5. MySQL宽字节注入漏洞分析_宽字节注入
  6. spi通讯不需要地线吗_抖音真的需要养号吗?不需要!千万别被割了韭菜
  7. CentOS报错:TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener
  8. 人工神经网络是如何实现存算一体的
  9. HTML5培训好不好
  10. 软件开发--深入理解程序的结构