Spark Transformation —— map算子

这里写图片描述

RDD特点

  • 在已有的RDD上创建一个新的RDD
  • 延迟执行(lazy), Transformation 的时候不执行,在促发action的时候执行。

map(func) 函数功能说明

返回一个新的分布式数据集,由每个原元素经过func函数转换后组成。新的分布式数据集和原数据集的形式是一样的。

将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。输入分区与输出分区一对一,即:有多少个输入分区,就有多少个输出分区。

上手使用

代码测试

在hdfs上放一个文件1.txt

这里写图片描述

打开spark-shell

spark-shell --master spark://master:7077(重要的事情说多遍,spark-shell和spark-submit核心的参数是差不多的)

Spark-shell 输入map测试代码

创建RDD

var data = sc.textFile("/qgzang/1.txt")

这里写图片描述

使用map算子

 var mapResult = data.map(line => line.split("\\s+"))

这里写图片描述

运算map算子结果

mapResult.collect()

这里写图片描述

输出:

res0: Array[Array[String]] = Array(Array(hello, world), Array(hello, spark), Array(hello, hive))

原理图

这里写图片描述

图中,每个方框表示一个RDD分区,左侧的分区经过用户自定义函数f:T->U映射为右侧的新的RDD分区。但是实际只有等到Action算子触发后,这个f函数才会和其他函数在一个Stage中对数据进行运算。 V1输入f转换输出V’ 1。

源码

/**
 * Return a new RDD by applying a function to all elements of this RDD.
 */
def map[U: ClassTag](f: T => U): RDD[U] = {
  val cleanF = sc.clean(f)
  new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF))
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值