Spark 学习笔记 —— 常见API
一、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的更多相关文章
- Spark学习笔记3——RDD(下)
目录 Spark学习笔记3--RDD(下) 向Spark传递函数 通过匿名内部类 通过具名类传递 通过带参数的 Java 函数类传递 通过 lambda 表达式传递(仅限于 Java 8 及以上) 常 ...
- Spark学习笔记0——简单了解和技术架构
目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...
- Spark学习笔记1——第一个Spark程序:单词数统计
Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...
- spark学习笔记总结-spark入门资料精化
Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
- Spark学习笔记2——RDD(上)
目录 Spark学习笔记2--RDD(上) RDD是什么? 例子 创建 RDD 并行化方式 读取外部数据集方式 RDD 操作 转化操作 行动操作 惰性求值 Spark学习笔记2--RDD(上) 笔记摘 ...
- Spark学习笔记之SparkRDD
Spark学习笔记之SparkRDD 一. 基本概念 RDD(resilient distributed datasets)弹性分布式数据集. 来自于两方面 ① 内存集合和外部存储系统 ② ...
- Spark学习笔记2(spark所需环境配置
Spark学习笔记2 配置spark所需环境 1.首先先把本地的maven的压缩包解压到本地文件夹中,安装好本地的maven客户端程序,版本没有什么要求 不需要最新版的maven客户端. 解压完成之后 ...
- Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)
Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...
随机推荐
- MySQL之IDE工具介绍及数据备份
一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...
- java Swing组件和事件处理(二)
1.BoxLayout类可以创建一个布局对象,成为盒式布局,BoxLayout在javax.Swing border 包中,java.swing 包提供一个Box类,该类也是一个类,创建的容器称作一 ...
- HTML&javaSkcript&CSS&jQuery&ajax(九)
一.HTML 1.单选按钮 <form action="><inpput type="radio" name="sex" value ...
- Nginx详解六:Nginx基础篇之Nginx日志
1.Nginx日志类型 error.log:记录Nginx处理http请求的错误的状态,以及Nginx服务本身服务运行的错误的状态 access_log:记录通过Nginx的http请求的访问状态,用 ...
- 集腋成裘-05-angularJS -初识angular
私以为angular的最大特点是:只关注数据 1.1 angular之:双向绑定 <!DOCTYPE html> <html ng-app=""> < ...
- Linux下安装软件命令详解
---------------------------------------------------------------- 或许你对于linux还不够了解,但是一旦你步入公司后,你就会发现lin ...
- VMware 虚拟机 Ubuntu 系统执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask) 解决:UP BROADCAST MULTICAST 问题
VMware 虚拟机 ifconfig没有net_addr地址.Bcast.Mask的解决方法 使用时间长的虚拟机,会莫名其妙的连接不上网 在终端中,使用ifconfig命令查看Ubuntu系统的IP ...
- python指定分隔符来分割文件
1 import re 2 p = re.compile('AAAAAAAA',re.S) 3 f = open(r"D:\test\oldfile.txt","r&qu ...
- PyOpenCV图像逆时针旋转90度
warpAffine方法效果很搓,留下大片黑色区域. 使用flip和transpose可以实现逆时针旋转90度.先flip或先transpose均可. #coding:utf-8 import cv2 ...
- 一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)
1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...