例如对一个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. LeetCode 389——找不同

    1. 题目 2. 解答 2.1. 方法一 将 s 和 t 转化为 Python 的列表,然后遍历列表 s 的元素,将它们从列表 t 中删除,最后列表 t 中会余下一个元素,即为所求. class So ...

  2. Python 3 学习笔记之——变量作用域、模块和包

    1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python 的作用域一共 ...

  3. K-Means和FCM聚类

    K均值聚类是基于原型的.划分的聚类方法.聚类数K由用户指定,初始的K个聚类中心随机选取,然后将每个点分派到最近的聚类中心,形成K个簇,接下来重新计算每个簇的聚类中心,重复上一步,直到簇不发生变化或达到 ...

  4. React错误总结解决方案(二)

    1.React native: Cannot add a child that doesn't have a YogaNode or parent node 该错误一般是因为render方法中注释语句 ...

  5. 学习bash——环境配置

    一.环境配置文件的重要性 Bash在启动时直接读取这些配置文件,以规划好bash的操作环境. 即使注销bash,我们的设置仍然保存. 二.login shell 通过完整的登录流程取得的bash,称为 ...

  6. iOS-SDWebImage的原理以及使用流程

    SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCacha 的 category,方便使用.SDWebImage加载图片的流程: 1. 入口 setImageWi ...

  7. Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法

    1. Delphi中的全局函数 //要点: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1; interface uses   Window ...

  8. Hibernate常用方法之_修改

    1.使用session的saveOrUpdate方法 public void updateUser(User user){ Session session = null; Transaction tr ...

  9. css引入特殊字体

    http://www.fontsquirrel.com/tools/webfont-generator        ttf格式的字体转换成其他格式的字体   css引入特殊字体建议只是用英文字体,中 ...

  10. CF869E The Untended Antiquity 解题报告

    CF869E The Untended Antiquity 题目描述 \(\text{Adieu l'ami}\). Koyomi is helping Oshino, an acquaintance ...