Spark学习笔记(一)——RDD基础

最近开始学习Spark,期望在以后实习和秋招过程中有所收获~~

RDD简介

弹性分布式数据集(Resilient Distributed Dataset,RDD),是Spark对数据的核心抽象概念,RDD实际上就是分布式的元素集合。在Spark中,对数据的所有的操作不外乎就是三步:创建RDD,转化已有的RDD,调用已有的RDD进行求值计算。

我们之所以把RDD描述为“弹性”,是因为在任何时候它都能进行“重新计算”。我们可以让Spark把数据持久化到许多不同的地方,在第一次对持久化的RDD计算之后,Spark会把RDD的内容保存到内存中(以分区的方式存储到集群中的各机器中),也可以把RDD缓存在磁盘上而非内存中,这样就可以在之后的行动操作中重复使用了。

	python_lines.persist()  #把RDD持久化到内存中
	python_lines.first()

一、创建RDD

Spark提供两种创建RDD的方式:读取外部数据集,在驱动器程序中对一个集合进行并行化。
创建RDD最简单的方法就是把程序中一个已有的集合传给 SparkContext(sc)parallelize() 方法,但这种方法用的并不多,因为它需要使用者事先将整个需要处理的数据集放在计算机的内存中,从而浪费资源。

lines = sc.parallelize(["China","I love China!"])

更常用的方法是从外部存储中读取数据来创建RDD:

lines = sc.textFile("/path/to/README.md")

二、RDD操作

RDD支持两种操作:转化操作行动操作

2.1 转化操作

转化操作(transformation) 是返回一个新的RDD操作,如map(),filter(),它会由一个RDD生成一个新的RDD。转化出来的RDD是惰性求值的,只有在行动操作中使用到这些RDD时才会被计算。

filter()操作不会改变已有的RDD中的数据,实际上,它会返回一个全新的RDD。如下列代码中的inputRDD在后面的程序中还可以继续使用,可以从中继续搜索其他的词汇。并且转换操作可以操作任意数量的RDD。

	inputRDD = sc.textFile("log.txt")  #假设我们有一个日志文件,内含有若干操作信息,包括报错信息
	errorRDD = inputRDD.filter(lambda x: "error" in x)  #使用转化操作filter()查找出日志文件中的错误信息
	warningRDD = inputRDD.filter(lambda x: "warning" in x)  #inputRDD还可以使用,用来查找警告信息
	badnewsRDD = errorRDD.union(warningRDD)   #打印包含error或warning的行数

2.2 行动操作

行动操作(action)会把最终求得的结果返回到驱动器程序,或者写入到外部存储系统中。因为行动操作需要生成实际的输出,所以会强制执行那些需要用到的RDD转化操作。这里为什么称 强制执行 转化操作呢?
实际上转化操作和行动操作的主要区别在于Spark计算RDD的方式不同。虽然我们可以在任意时刻定义一个RDD,但Spark只会惰性的计算这些RDD,所谓惰性,即只有第一次在一个行动操作中用到时,才会真正计算。很佩服想出这个处理策略的设计者,这种策略在大数据领域是很有道理的。我们在创建RDD时如果是从外部存储中读取非常大量级的文件(TB级),跟pandas库open()read()一样,运行lines = sc.textFile(path)时就把文件中的所有行都读取并存储起来,就会消耗掉很多空间,读取的速度也会很慢,而在接下来的行动操作中又会过滤掉很多不符合条件的数据,这样就会多做很多无用功。但实际上,在行动操作中,如first(),Spark只需要扫描文件直到找到第一个匹配的行为止,而不需要读取整个文件。如:

   lines = sc.textFile("README.md")  #创建一个字符串的RDD
   python_lines = lines.filter(lambda line: "Python" in line)   #调用转化操作filter()
   python_lines.first()  #调用first()行动操作
   #输出结果为 u'high-level APIs in Scala, Java, Python, and R, and an optimized engine that'

这就是为什么称“强制执行”转化操作的原因。

参考文献

Holden Karau, Andy Konwinski, Patrick Wendell, Matei Zagaria. Learning Spark: Lighting-fast Data Analysis.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值