spark的transformation和action的操作学习笔记

author author     2022-08-05     205

关键词:

一、spark的transformation 和 action区别

Spark有一些基本的transformation 和 action的操作,其中transformation形成各类型的RDD,action不形成RDD,而是对RDD进行累加、合并、保存操作。


技术分享

二、transformation 有哪些

transformation有map、filter、flatMap(与map不一样)、Sample、groupByKey、ReduceByKey、Union、Join、cogroup、crossProduct、mapValues、sort、partitionBy,共13种。还有sortByKey呢?

1、map:

val rdd = sc.parallelize(List(1,2,3,4,5,6))  

val mapRdd = rdd.map(_*2)  //这是典型的函数式编程

mapRdd.collect()  //上面的map是transformation,到了这里的collect才开始执行,是action,返回一个Array    Array(2,4,6,8,10,12)


map(x=>(x,1)),将map(x)这样的,映射成map(x,1)这样的,一般用于对Key进行计数

2、filter

过滤,选择函数,

val filterRdd = mapRdd.filter(_ > 5)

filterRdd.collect() //返回所有大于5的数据的一个Array, Array(6,8,10,12)


3、flatmap加上reduceBykey


val wordcount = rdd.flatMap(_.split(‘ ‘)).map((_, 1)).reduceByKey(_+_)  //把每一行进行根据空格分割,然后flatMap会把多个list合并成一个list,最后把每个元素变成一个元组

//然后把具有相同key的元素的value进行相加操作,参考上面图片中的函数定义,针对reduceByKey,传入的函数是对value进行操作的。

wordcount.saveAsTextFile("/xxx/ss/aa")   //把结果存入文件系统

wordcount.collect //可以得到一个数组


4、groupByKey

对文件按照空格进行分割后,按照单词进行groupByKey分组

val wordcount=rdd.flatMap(_.split(‘ ‘)).map(_.1)).groupByKey

使用collect查看一下结果

wordcount.collect




5、Union

2个合并成1个

val rdd1 = sc.parallelize(List((‘a‘,1),(‘a’, 2)))

val rdd2 = sc.parallelize(List((‘b‘,1),(‘b’, 2)))

val result_union = rdd1 union rdd2 //结果是把两个list合并成一个,List((‘a‘,1),(‘a’, 2),(‘b‘,1),(‘b’, 2))



6、Join

笛卡尔积的干活,小组循环赛

val rdd1 = sc.parallelize(List((‘a‘,1),(‘a’, 2), (‘b‘, 3)))

val rdd2 = sc.parallelize(List((‘a‘,4),(‘b’, 5)))

val result_union = rdd1 join rdd2 //结果是把两个list做笛卡尔积,Array((‘a‘, (1,4), (‘a‘, (2,4), (‘b‘, (3, 5)))



7、sortByKey

排序,非常好用的哈

val wordcount = rdd.flatMap(_split(‘ ‘)).map(_,1).reduceByKey(_+_).map(x => (x._2, x._1)).sortByKey(false).map(x => (x._2, x._1))

//其实完成了一个sort by value的过程, sortByKey(false),表示倒序排列




三、action有哪些

action有count、collect、reduce、lookup、save5种。

1、count

计算rdd的个数

val rdd = sc.textFile("/xxx/sss/ee")

rdd.count //计算行数

rdd.cache   //可以把rdd保留在内存里面

rdd.count //计算行数,但是因为上面进行了cache,这里速度会很快


2、collect

collect函数可以提取出所有rdd里的数据项

val rdd1=sc.parallelize(List((‘a‘,1),(‘b‘,1)))

val rdd2=sc.parallelize(List((‘c‘,1),(‘d‘,1)))

val result=rdd1 union rdd2

使用collect操作查看一下执行结果


3、reduce

map、reduce是hadoop的2个核心,map是映射,reduce是精简

val rdd = sc.parallelize(List(1,2,3,4))

rdd.reduce(_+_) //reduce是一个action,这里的结果是10


4、lookup

查找的干活

val rdd = sc.parallelize(List((‘a‘,1),(‘a’, 2),(‘b‘,1),(‘b’, 2))

rdd.lookup("a") //返回一个seq, (1, 2) 是把a对应的所有元素的value提出来组成一个seq


5、save

查询搜索结果排名第 1 点击次序排在第 2 的数据

val rdd1 = sc.textFile("hdfs://192.168.0.10:9000/input/SogouQ2.txt").map(_.split(" "))   //长度为6错误,好像日志不标准,有的为6,有的不是  .filter(_.length==6)

rdd1.count()

val rdd2=rdd1.filter(_(3).toInt==1).filter(_(4).toInt==2).count()

rdd2.saveAsTextFile("hdfs://192.168.0.10:9000/output/sogou1111/")


spark的转化和行动(transformations和action)

 //**********************装换操作*********************1、defmap[U:ClassTag](f:T=>U):RDD[U]  将函数应用于RDD的每一元素,并返回一个新的RDD2、deffilter(f:T=>Boolean):RDD[T]       查看详情

如何在spark中使用transform python udf执行hql脚本?

】如何在spark中使用transformpythonudf执行hql脚本?【英文标题】:Howtoexecutehqlscriptwithtransformpythonudfinspark?【发布时间】:2017-09-1407:27:57【问题描述】:我是通过POC激发和学习的新手。作为此POC的一部分,我正在尝试直接执行具有tran... 查看详情

spark教程一rdd和核心概念

...于Mapreduce,RDD也有分区的概念。RDD是不可变的可以变换(Transformation)操作RDD,但是这个变换返回的是一个全新的RDD,原先的RDD保持不变2.RDD的两种操作Transformation和Action  tr 查看详情

spark的transformation和action算子简介

transformation算子map(func)返回一个新的分布式数据集,由每个原元素经过func函数处理后的新元素组成filter(func)返回一个新的数据集,由经过func函数处理后返回值为true的原元素组成flatMap(func)类似于map,但是每一个输入元素,会被映... 查看详情

spark

Transformation 和Action本质区别:Transformations是RDD到RDD;Actions是RDD到result。 Actions算子触发Spark job。   Sparkgroupbykey和cogroup使用示例 groupByKeygroupByKey([numTasks])是数据分组操作,在一 查看详情

spark篇---spark中transformations转换算子

一、前述Spark中默认有两大类算子,Transformation(转换算子),懒执行。action算子,立即执行,有一个action算子,就有一个job。通俗些来说由RDD变成RDD就是Transformation算子,由RDD转换成其他的格式就是Action算子。 li{list-style:none;m... 查看详情

spark基础--rdd算子详解

RDD算子分为两类:Transformation和Action,如下图,记住这张图,走遍天下都不怕。 Transformation:将一个RDD通过一种规则映射为另外一个RDD。Action:返回结果或保存结果。注意:只有action才触发程序的执行,transformation不触发执行... 查看详情

如何成为云计算大数据spark高手

...提供给开发者API掌握Spark中面向RDD的开发模式,掌握各种transformation和action函数的使用;掌握Spark中的宽依赖和窄依赖以及lineage机制;掌握RDD的计算流程,例如Stage的划分、Spark应用程序提交给集群的基本过程和Worker节点基础的工作... 查看详情

spark和mapreduce的比较

...料,收集整理如下:1、通用性spark更加通用,spark提供了transformation和action这两大类的多个功能api,另外还有流式处理sparkstreaming模块、图计算GraphX等等;mapreduce只提供了map和reduce两种操作,流计算以及其他模块的支持比较缺乏。... 查看详情

Spark Transformation - 为啥它是懒惰的,有啥优势?

】SparkTransformation-为啥它是懒惰的,有啥优势?【英文标题】:SparkTransformation-Whyisitlazyandwhatistheadvantage?SparkTransformation-为什么它是懒惰的,有什么优势?【发布时间】:2016-10-2722:16:21【问题描述】:SparkTransformations被延迟评估-当... 查看详情

spark记录spark算子之transformation(代码片段)

一、map、flatMap、mapParations、mapPartitionsWithIndex1.1 mapmap十分容易理解,他是将源JavaRDD的一个一个元素的传入call方法,并经过算法后一个一个的返回从而生成一个新的JavaRDD。(1) 使用Java进行编写publicstaticvoidmap()List<String>li... 查看详情

spark2.0pipelines

...可以分别存储文本,特征向量,真实的Lables,和预测值。Transformer:一个Transformer是一个算法,可以将一个DataFrame转换为另 查看详情

spark常用的transformation算子(代码片段)

1.map和mapPartitionsmap的输入变换函数应用于RDD中所有元素,而mapPartitions应用于所有分区。区别于mapPartitions主要在于调用粒度不同。mapPartition可以倒过来理解,先partition,再把每个partition进行map函数,适用场景:如果在映射的过程... 查看详情

03操作rdd(transformation和action案例实战)

1、transformation和action介绍Spark支持两种RDD操作:transformation和action。transformation操作会针对已有的RDD创建一个新的RDD;而action则主要是对RDD进行最后的操作,比如遍历、reduce、保存到文件等,并可以返回结果给Driver程序。 例如... 查看详情

spark中文手册4:spark之基本概念

转自:http://www.aboutyun.com/thread-11516-1-1.html问题导读1、什么是DStream转换?2、什么是窗口计算?3、怎样最有效的将发生数据到外部系统?DStream中的转换(transformation)和RDD类似,transformation允许从输入DS 查看详情

spark算子介绍(代码片段)

Spark对RDD的操作可以整体分为两类:Transformation和Action转换操作(Transformation)(如:map,filter,groupBy,sortBy,join等),转换操作也叫懒操作,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spar... 查看详情

spark算子介绍(代码片段)

Spark对RDD的操作可以整体分为两类:Transformation和Action转换操作(Transformation)(如:map,filter,groupBy,sortBy,join等),转换操作也叫懒操作,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spar... 查看详情

spark算子介绍(代码片段)

Spark对RDD的操作可以整体分为两类:Transformation和Action转换操作(Transformation)(如:map,filter,groupBy,sortBy,join等),转换操作也叫懒操作,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spar... 查看详情