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

一、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("\t"))   //长度为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/")

时间: 2024-08-26 08:34:31

Spark的transformation 和 action的操作学习笔记的相关文章

Spark中的各种action算子操作(java版)

在我看来,Spark编程中的action算子的作用就像一个触发器,用来触发之前的transformation算子.transformation操作具有懒加载的特性,你定义完操作之后并不会立即加载,只有当某个action的算子执行之后,前面所有的transformation算子才会全部执行.常用的action算子如下代码所列:(java版) package cn.spark.study.core; import java.util.Arrays; import java.util.List; im

MySQL4.0命令操作学习笔记

声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqladmin.exe 回车按照提示: 输入winmysqladmin初始用户.密码(注:mysql里用户.密码)随便填必意 2.根目录密码重置 mysqladmin -u root -p password 123456 回车出现 Enter password: ( 注:叫输入原密码. 刚安装时密码空,所直

Winform操作Access数据库增删改操作学习笔记

此程序是本人学习Winform操作Access数据库时学习笔记. 程序源码来源于:<Visual C# 2008 程序开发入门与提高 >赵增敏 编著 操作方法: 1.新建一个Winform项目,并将该项目设置为启动项目: 2.复制数据库文件到程序根目录下. 3.添加3个Label.两个TextBox.一个ListBox,四个Button控件. 4.窗体底部Label修改名称为“labelMsg”,两个文本框修改名称为:textboxSurname,textboxName. 5.列表框命名为Li

spark RDD transformation与action函数巩固 (未完)

1.创建RDD val lines = sc.parallelize(List("pandas","i like pandas")) 2.加载本地文件到RDD val linesRDD = sc.textFile("yangsy.txt") 3.过滤 filter 需要注意的是 filter并不会在原有RDD上过滤,而是根据filter的内容重新创建了一个RDD val spark = linesRDD.filter(line => lin

Spark的transformation和action算子简介

transformation算子 map(func) 返回一个新的分布式数据集,由每个原元素经过func函数处理后的新元素组成 filter(func) 返回一个新的数据集,由经过func函数处理后返回值为true的原元素组成 flatMap(func) 类似于map,但是每一个输入元素,会被映射为0个或多个输出元素,(因此,func函数的返回值是一个seq,而不是单一元素) mapPartitions(func) 类似于map,对RDD的每个分区起作用,在类型为T的RDD上运行时,func的函

Spark(五)Spark之Transformation和Action

Transformation算子 基本的初始化 java static SparkConf conf = null; static JavaSparkContext sc = null; static { conf = new SparkConf(); conf.setMaster("local").setAppName("TestTransformation"); sc = new JavaSparkContext(conf); } scala private v

Scala中泛型类、泛型函数、泛型在Spark中的广泛应用之Scala学习笔记-33

package com.leegh.parameterization /** * @author Guohui Li */import scala.reflect.ClassTag class Trible[F, S, T](val first: F, val second: S, val third: T) object Hello_Type_Parameterization { def main(args: Array[String]): Unit = { val triple = new

Machine Learning In Action 第二章学习笔记: kNN算法

本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数字识别 通过“约会对象”功能,基本能够了解到kNN算法的工作原理.“手写数字识别”与“约会对象预测”使用完全一样的算法代码,仅仅是数据集有变化. 约会对象预测 1 约会对象预测功能需求 主人公“张三”喜欢结交新朋友.“系统A”上面注册了很多类似于“张三”的用户,大家都想结交心朋友.“张三”最开始通过自己筛选的

表的连接操作(学习笔记)

在数据库中对于数据表的连接操作一共提供了两种: 内连接:也称等值连接在where中消除笛卡尔积的条件就是采用了内连接方式进行的 外连接: 内连接中只能显示等值满足的条件,不满足的条件则无法显示,如果希望显示特定表中的全部数据就要用要外连接 外连接分3种    在Oracle中使用(+)表示连接 左外连接(左连接) 左关系属性=右关系属性(+) 表示左外连接 右外连接(右连接) 左关系属性(+)=右关系属性 表示右外连接 全外连接(全连接) 示例一 (内连接) 将emp和dept表联合查询 SEL