例如对一个JavaPairRDD<String, String>做遍历操作,常见的,我们可以通过先通过collect()操作将它转化为Map对象再进行遍历,也可以使用Spark提供的mapToPair方法进行遍历。然而两者的性能差距是非常显著的。

仅仅遍历1500条长度为155的序列,前者需要消耗6s,后者只需要消耗不到1s的时间。这说明,将Spark内存对象转化为普通Java对象有时会产生巨大的开销!

这里需要提到的是,我依旧还没有源代码,过年争取看一下。

贴上两个遍历操作的源代码:

第一种Map遍历:

        List<String> s_key = new ArrayList<>();
fastaDataJavaPairRDD.collect().forEach(a -> {
s_key.add(a._1);
});
fastaDataJavaPairRDD = null;
List<String> s_out1 = new ArrayList<>();
List<String> s_out2 = new ArrayList<>();
fastaMSADataJavaPairRDD.collect().forEach(a -> {
s_out1.add(a._1);
s_out2.add(a._2);
});
fastaMSADataJavaPairRDD = null;
System.out.println((System.currentTimeMillis()-startTime)+"ms");

  

第二种mapToPair遍历:

        List<String> s_key = new ArrayList<>();
fastaDataJavaPairRDD.mapToPair(
(PairFunction<Tuple2<String, String>, String, String>) stringTuple2 -> {
s_key.add(stringTuple2._1);
return new Tuple2<>(null, null);
}
);
fastaDataJavaPairRDD = null;
List<String> s_out1 = new ArrayList<>();
List<String> s_out2 = new ArrayList<>();
fastaMSADataJavaPairRDD.mapToPair(
(PairFunction<Tuple2<String, String>, String, String>) stringTuple2 -> {
s_out1.add(stringTuple2._1);
s_out2.add(stringTuple2._2);
return new Tuple2<>(null, null);
}
);
fastaMSADataJavaPairRDD = null;
System.out.println((System.currentTimeMillis()-startTime)+"ms");

  

但是,也请注意,分布式下的map,mapToPair等操作都是闭包的,也要注意这些操作内部调用的类和方法都必须是序列化后的,否则是线程不安全的。Spark在操作时,将map等算子内部的操作代码拷贝到每台从节点,从节点进行分别的操作,因此内部不应该出现线程不安全的类和方法。需要注意。

Spark优化之一:分布式下的map操作是闭包的更多相关文章

  1. spark优化参数调节和故障参数调节

    1:“物尽其用”,但给spark分配多个机器后,先需配置spark-submit shell如下: /usr/local/spark/bin/spark-submit \ --class com.sp ...

  2. 【spark】spark应用(分布式估算圆周率+基于Spark MLlib的贷款风险预测)

    注:本章不涉及spark和scala原理的探讨,详情见其他随笔 一.分布式估算圆周率 计算原理:假设正方形的面积S等于x²,而正方形的内切圆的面积C等于Pi×(x/2)²,因此圆面积与正方形面积之比C ...

  3. 聊聊分布式下的WebSocket解决方案

    前言 最近王子自己搭建了个项目,项目本身很简单,但是里面有使用WebSocket进行消息提醒的功能,大体情况是这样的. 发布消息者在系统中发送消息,实时的把消息推送给对应的一个部门下的所有人. 这里面 ...

  4. spark优化项

    一.Shuffle优化项 1.Shuffle优化配置 - spark.shuffle.file.buffer 默认值:32k 参数说明:该参数用于设置shuffle write task的Buffer ...

  5. lucene之排序、设置权重、优化、分布式搜索(转)

    lucene之排序.设置权重.优化.分布式搜索(转) 1. 基本应用 using System;using System.Collections.Generic;using System.Text;u ...

  6. spark优化设置

    ->>>配置参数优化 SparkConf sc = new SparkConf().setAppName("com.sp.test.GroupTop3").set ...

  7. (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子

    本篇先介绍HBase在伪分布式环境下的安装方式,然后将MapReduce编程和HBase结合起来使用,完成WordCount这个例子. HBase在伪分布环境下安装 一.   前提条件 已经成功地安装 ...

  8. Spark Streaming之六:Transformations 普通的转换操作

    与RDD类似,DStream也提供了自己的一系列操作方法,这些操作可以分成四类: Transformations 普通的转换操作 Window Operations 窗口转换操作 Join Opera ...

  9. spark on yarn模式下内存资源管理(笔记1)

    问题:1. spark中yarn集群资源管理器,container资源容器与集群各节点node,spark应用(application),spark作业(job),阶段(stage),任务(task) ...

随机推荐

  1. 第一课:SVN代码管理

    SVN:是一个跨平台的开源的版本控制系统.svn版本管理工具管理着随时间改变的各种数据.这些数据放置在一个中央资料档案库中.svn会备份并记录每个文件每次的修改更新变动.svn的工作流程:1.在中央库 ...

  2. C#中System.DBNull的问题

    今天写一个C#的数据库Demo,第一个功能,用户登录,数据库中用户表(Staff)最后一个字段ZP(呵呵,PowerDesigner中文直接翻译的)照片字段为空, 我的登录逻辑是通过用户名以及密码查询 ...

  3. Java——异常博客作业

    本次任务地址 6. 为如下代码加上异常处理 6.1 改正代码,并增加如下功能.当找不到文件时,需提示用户找不到文件xxx,请重新输入文件名,然后尝试重新打开. 如果是其他异常则提示打开或读取文件失败! ...

  4. 结对作业 -GUI四则运算

    目录: 一.前言(及项目地址) 二.PSP(planning) 三.结对编程中对接口的设计 四.计算模块接口的设计与实现过程 五.计算模块接口部分的性能改进 六.计算模块部分单元测试展示 七.计算模块 ...

  5. Xcode 6.0中彻底关闭ARC

    对整个项目关闭ARCproject -> Build settings -> Apple LLVM complier 3.0 - Language -> objective-C Au ...

  6. BZOJ 2820: YY的GCD | 数论

    题目: 题解: http://hzwer.com/6142.html #include<cstdio> #include<algorithm> #define N 100000 ...

  7. Tourists——圆方树

    CF487E Tourists 一般图,带修求所有简单路径代价. 简单路径,不能经过同一个点两次,那么每个V-DCC出去就不能再回来了. 所以可以圆方树,然后方点维护一下V-DCC内的最小值. 那么, ...

  8. mybatis的mapper文件的大于号特殊符号使用

    第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. SELECT * FROM test WHERE 1 = 1 AND start_date  <= CURRENT_DA ...

  9. hadoop删除节点和添加节点

    从hadoop移除机器把需要移除的机器增加到exclueds文件中,强制刷新datanode列表,等待decommission 状态正常后,即可停机下架,如有必要在namenode执行balancer ...

  10. PowerShell官方文档

    PowerShell PowerShell 在 .NET Framework 基础之上构建,是一种基于任务的命令行 Shell 脚本语言:专门面向系统管理员和高级用户,可快速自动化多个操作系统(Lin ...