一、RDD 的创建

1)通过 RDD 的集合数据结构,创建 RDD

sc.parallelize(List(1,2,3),2) 其中第二个参数代表的是整个数据,分为 2 个 partition,默认情况会讲数据集进行平分,注意不是两个副本

2)通过文件来读取

sc.textFile("file.txt")

sc.sequenceFile("file.txt") sequeceFile 是 HDFS 一些数据结构

文件读取的位置,容易产生奇异,比如一下几种形式:

1)、inputRdd = sc.textFile("/data/input")

2)、inputRdd = sc.textFile("file:///data/input")

3)、inputRdd = sc.textFile("hdfs:///data/input")

4)、inputRdd = sc.textFile("hdfs://namenode:8020/data/input")

第一种 /data/input 具体读取的是本地和 hdfs上的文件,要依赖于上下文环境,driver 的配置,driver 是 local 的模式就读的本地文件,driver 是 cluster 模式的且在conf里面配置了 hdfs 的 namenode 地址的,则是读取的远程的文件

第二种 file:///data/input 是强制 executor 读取本地的数据,这样完全是为了本地测试用的,如果是在集群上运行作业,executor 具体运行的物理机器的相应目录未必存在

二、List 集合 RDD 常见的 Transformation 操作

1、map:1 对 1 进行映射

2、filter:过滤

3、flatMap:1 对 多进行映射

举个例子

listRdd = sc.parallelize(List(1,2,3),1)

nums.flatMap(x=>1 to x) // {1,2,3,2,3,3}

三、key-value 集合的RDD操作

val listRdd = sc.parallelize(List((“cat”,1),("dog",1),("cat",2)))

listRdd.reduceByKey(_+_) // => {(cat,3),(dog,1)}

listRdd.groupByKey() // => {(cat,Seq(1,2),(dog,Seq(1))}

reduceByKey 自动在map端进行本地的 combine 操作

四、RDD 常见的 Action 操作

Action 操作,分为,内存聚类操作,存储类操作

内存聚集类操作是讲分布式的数据集 汇聚到 driver 运行端,或者汇聚完之后进行聚合运算

1、collect() // 将 RDD 保存在本地集合收集到本地, 此“本地” 是只 driver 运行的机器,如何 RDD 很大,很可能会把 driver 端给撑爆了

2、take()

3、count()

4、reduce(_+_)

存储类操作是通过 driver 发起分别进行存储

1、saveAsTextFile

2、saveAsSequenceFile

五、Spark RDD的 Join 操作

Join 操作必须是 针对 2个或多个 key-value 的 List 集合

join 和 cogroup 的区别

如何控制 reduceByKey、groupByKey、join 的并行度

通过参数来修改

1、reduceByKey(_+_,5)

2、groupByKey(5)

通过修改默认的参数来配置

spark.default.parallelism

可以这样来理解问 reduce 的数量的控制,原理我猜是通过 hash 讲不同的key进行分桶

hadoop 的 reduce 默认是启动一个 task,spark 默认的 reduce 端的聚合操作默认和前一个阶段的并发度是一样的

六、spark 的 accumulator 和 广播变量(HttpBroadCast和TorrentBroadcast)

非常类似于 hadoop 里面的 counter 和 分布式缓存,只是分布式缓存是通过文件的方式

七、RDD 的 Cache

分析下以下2段代码的区别:

// 有 cache 函数

val data = sc.textFile("hdfs://nn:8020/input")
data.cache()
data.filter(_.startWith("error")).count()
data.filter(_.startWith("hadoop")).count()
data.filter(_.startWith("hbase")).count()

// 无 cache 函数
val data = sc.textFile("hdfs://nn:8020/input")
data.filter(_.startWith("error")).count()
data.filter(_.startWith("hadoop")).count()
data.filter(_.startWith("hbase")).count()

Spark 学习笔记 —— 常见API的更多相关文章

  1. Spark学习笔记3——RDD(下)

    目录 Spark学习笔记3--RDD(下) 向Spark传递函数 通过匿名内部类 通过具名类传递 通过带参数的 Java 函数类传递 通过 lambda 表达式传递(仅限于 Java 8 及以上) 常 ...

  2. Spark学习笔记0——简单了解和技术架构

    目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...

  3. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  4. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  5. Java学习笔记之---API的应用

    Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...

  6. Spark学习笔记2——RDD(上)

    目录 Spark学习笔记2--RDD(上) RDD是什么? 例子 创建 RDD 并行化方式 读取外部数据集方式 RDD 操作 转化操作 行动操作 惰性求值 Spark学习笔记2--RDD(上) 笔记摘 ...

  7. Spark学习笔记之SparkRDD

    Spark学习笔记之SparkRDD 一.   基本概念 RDD(resilient distributed datasets)弹性分布式数据集. 来自于两方面 ①   内存集合和外部存储系统 ②   ...

  8. Spark学习笔记2(spark所需环境配置

    Spark学习笔记2 配置spark所需环境 1.首先先把本地的maven的压缩包解压到本地文件夹中,安装好本地的maven客户端程序,版本没有什么要求 不需要最新版的maven客户端. 解压完成之后 ...

  9. Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)

    Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...

随机推荐

  1. 【python】统一转换日期格式dateutil.parser.parse

    背景: 我有很多很多的日志数据,每个日志里面都有日期字符串,我需要将其转换为datetime格式. 问题是,这些日志里的字符串格式五花八门,有2017-05-25T05:27:30.313292255 ...

  2. PDF裁剪页面,PDF怎么裁剪页面的方法

    PDF文件要怎么裁剪页面呢,是不是有很多的小伙们想知道呢,当打开一个PDF文件的时候如果一个页面中有很多的空白页面就会影响文件的美观与使用,今天小编就为大家分享一下小编的裁剪页面的方法. 操作软件:迅 ...

  3. 用来表达更复杂的sql语句!!!!!extra 原声sql

    extra 用来表达更复杂的sql语句!!!!! extra可以指定一个或多个 参数,例如 select, where or tables. 这些参数都不是必须的,但是你至少要使用一个!要注意这些额外 ...

  4. C++11新特性--decltype (转)

    返回值 decltype(表达式) [返回值的类型是表达式参数的类型] 这个可也用来决定表达式的类型,就像Bjarne暗示的一样,如果我们需要去初始化某种类型的变量,auto是最简单的选择,但是如果我 ...

  5. document.getElementsByClassName() 原生方法 通过className 选择DOM节点

    <div id="box"> <div class="box">1</div> <div class="bo ...

  6. XMind思维导图使用笔记

    首先新建一个空白的图 以组织结构图(向下)  为例 1.双击组织结构图 创建一个空白的页面 2.随便选择一个风格 这时候出现工作台 现在里面只有一个中心主题 正文部分开始 1.如果想要添加一个子主题 ...

  7. hexo+github page +markdown问题汇总

    1.没有权限提交 解决办法:把git版本由2.x改为1.9 未完待续

  8. .Net分布式锁

    项目中一般使用lock作为锁,以便于多线程操作确保库内数据统一.但是如果分布式部署项目,则这种锁就是去了意义,这时可以使用redis或memcache的add方法作为分布式锁. 栗子

  9. Centos+Redis 集群

    Redis 3.2.6集群搭建 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):slave- ...

  10. python---自己实现二分法列表查找

    这是以我自己的思维来实现的,没有用递归. # coding = utf-8 # 二分查找,适用于有序列表,日常编程用不到,因为index函数可以搞定的. # 查找到数字,返回列表中的下标,找不到数字, ...