重点看mapPartitions

本文转自http://blog.csdn.net/guotong1988/article/details/50555185,所有权力归原作者所有。

map(function) 
map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。

举例:

val a = sc.parallelize(1 to 9, 3)
val b = a.map(x => x*2)//x => x*2是一个函数,x是传入参数即RDD的每个元素,x*2是返回值
a.collect
//结果Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
b.collect
//结果Array[Int] = Array(2, 4, 6, 8, 10, 12, 14, 16, 18)

当然map也可以把Key变成Key-Value对

val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "panther", " eagle"), 2)
val b = a.map(x => (x, 1))
b.collect.foreach(println(_))
/*
(dog,1)
(tiger,1)
(lion,1)
(cat,1)
(panther,1)
( eagle,1)
*/

mapPartitions(function) 
map()的输入函数是应用于RDD中每个元素,而mapPartitions()的输入函数是应用于每个分区


package testimport scala.Iteratorimport org.apache.spark.SparkConf
import org.apache.spark.SparkContextobject TestRdd {def sumOfEveryPartition(input: Iterator[Int]): Int = {var total = 0input.foreach { elem =>total += elem}total}def main(args: Array[String]) {val conf = new SparkConf().setAppName("Spark Rdd Test")val spark = new SparkContext(conf)val input = spark.parallelize(List(1, 2, 3, 4, 5, 6), 2)//RDD有6个元素,分成2个partitionval result = input.mapPartitions(partition => Iterator(sumOfEveryPartition(partition)))//partition是传入的参数,是个list,要求返回也是list,即Iterator(sumOfEveryPartition(partition))result.collect().foreach {println(_)//6 15}spark.stop()}
}

mapValues(function) 
原RDD中的Key保持不变,与新的Value一起组成新的RDD中的元素。因此,该函数只适用于元素为KV对的RDD。

val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "panther", " eagle"), 2)
val b = a.map(x => (x.length, x))
b.mapValues("x" + _ + "x").collect

//"x" + _ + "x"等同于everyInput =>"x" + everyInput + "x" 
//结果 
Array( 
(3,xdogx), 
(5,xtigerx), 
(4,xlionx), 
(3,xcatx), 
(7,xpantherx), 
(5,xeaglex) 
)


mapWith和flatMapWith 
感觉用得不多,参考http://blog.csdn.net/jewes/article/details/39896301


flatMap(function) 
与map类似,区别是原RDD中的元素经map处理后只能生成一个元素,而原RDD中的元素经flatmap处理后可生成多个元素

val a = sc.parallelize(1 to 4, 2)
val b = a.flatMap(x => 1 to x)//每个元素扩展
b.collect
/*
结果    Array[Int] = Array( 1, 1, 2, 1, 2, 3, 1, 2, 3, 4)
*/

flatMapValues(function)

val a = sc.parallelize(List((1,2),(3,4),(5,6)))
val b = a.flatMapValues(x=>1 to x)
b.collect.foreach(println(_))
/*
(1,1)
(1,2)
(3,1)
(3,2)
(3,3)
(3,4)
(5,1)
(5,2)
(5,3)
(5,4)
(5,5)
(5,6)
*/

Spark API 详解/大白话解释 之 map、mapPartitions、mapValues、mapWith、flatMap、flatMapWith、flatMapValues相关推荐

  1. Spark API 详解(转)

    spark中,slice=partition,一个slice对应一个task,启动task的数量上限取决于集群中核的数量 sc.parallelize(0 until numMappers, numM ...

  2. 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink批处理API详解与编程实战025--DateSet实用API详解025

    一.Flink DateSet定制API详解(JAVA版) -002 flatMap 以element为粒度,对element进行1:n的转化. 执行程序: package code.book.bat ...

  3. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  4. spark RDD详解及源码分析

    spark RDD详解及源码分析 @(SPARK)[spark] spark RDD详解及源码分析 一基础 一什么是RDD 二RDD的适用范围 三一些特性 四RDD的创建 1由一个已经存在的scala ...

  5. spark 调度模块详解及源码分析

    spark 调度模块详解及源码分析 @(SPARK)[spark] spark 调度模块详解及源码分析 一概述 一三个主要的类 1class DAGScheduler 2trait TaskSched ...

  6. 【java8新特性】——Stream API详解(二)

    一.简介 java8新添加了一个特性:流Stream.Stream让开发者能够以一种声明的方式处理数据源(集合.数组等),它专注于对数据源进行各种高效的聚合操作(aggregate operation ...

  7. Java 8 Stream API详解

    Java 8 Stream API详解 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStrea ...

  8. Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!

    Spark分区详解!DT大数据梦工厂王家林老师亲自讲解! http://www.tudou.com/home/_79823675/playlist?qq-pf-to=pcqq.group 一.分片和分 ...

  9. android常用api大全,Android API详解大全.pdf

    Android API详解大全 Android -- TextView 一.TextView的API 1.1 结构 java.lang.Object ↳ android.view.View ↳ and ...

最新文章

  1. python清华大学出版社第三章课堂作业的答案_Python程序设计清华大学出版社董付国第3章选择与循环题库.ppt...
  2. vue+mint-ui地址三级or四级联动
  3. NLP数据分词小整理
  4. vue中的倒计时跳转页面问题和axios网络请求this作用域问题
  5. python五:运算符
  6. 山东理工大计算机专业学什么科目,2020年山东理工大学计算机科学与技术学院880数据结构硕士研究生入学考试科目大纲...
  7. ubuntu wifi固定ip_自制wifi遥控小车!ESP8266实践指南(二)
  8. iPhone应用程序编程指南(图形和描画)
  9. java 自动化测试报告_Java自动化测试框架-10 - TestNG之测试结果篇
  10. (八)用于人脸识别的Web API
  11. android真实项目教程(三)——首页初点缀_by_CJJ
  12. python怎么做项目_...内学习python和django,并做出一个项目需要怎么准备,可以做什么......
  13. MFC的多国语言界面的实现
  14. 三菱Q PLC解密 用户名功能块FB破解
  15. 常用Windows快捷键大全
  16. PalmOS开发教程
  17. c#rs232与三菱通讯_三菱各系统的RS232通讯接口汇总
  18. 上门洗车APP --- Android客户端开发 之 项目结构介绍
  19. 通信工程测试图修改软件,通信工程工具仪器大全,你用过几种?
  20. Autoware1.14-摄像头目标检测YOLO-V3

热门文章

  1. 转:PriorityQueue
  2. 转:漫画 我讨厌阅读别人的代码
  3. .NET2.0和microsoft新知识体系-ASP.NET 2.0新特性
  4. 几时几分几秒怎么写_泼尿 涂油漆 写威胁语 业主莫名被骚扰
  5. 动态规划——删除并获得点数(Leetcode 740)
  6. 深度优先搜索——单词方阵(洛谷 P1101)
  7. java es 搜索_使用elasticsearch从多个列表中搜索
  8. hive hql文档_Hive存储过程HQL/SQL(一)–hplsql命令行
  9. PostgreSQL的日志文件和数据加载
  10. 近十万DBA关注的20+专栏