代码改变世界

spark快速大数据分析学习笔记(1)

2018-11-30 11:53  刘叔555  阅读(362)  评论(0编辑  收藏  举报

本文是《spark快速大数据分析学习》第三章学习笔记,文中大量摘抄书中原本,仅为个人学习笔记。

RDD基础:

RDD是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这个分区运行在集群的不同节点上。RDD可以包含Python、Java、Scala中任意类型的对象。

创建RDD的方式:

读取一个外部数据集,或者在驱动器程序里分发驱动器程序中的对象集合,例如list和set。

RDD支持两种类型的操作:

转换操作和行动操作。转换操作的时候只会惰性的求值,只有行动操作的时候才会真正的求值。转化操作返回的是RDD,行动操作返回的是其他的数据类型。
 
从上层来看,每个spark应用都由一个驱动器程序来发起集群上的各种并行操作。驱动器程序包换应用的main函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作。spark shell本身就是驱动器,你只要输入你想要的操作就可以了。驱动器程序通过一个sparkcontext对象来访问spark,这个对象对象代表着对计算集群的一个连接,shell启动时自动创建一个sparkcontext对象,是一个叫做sc的变量。
 

创建RDD:

1、将程序已有的集合传给SparkContext的parallelize()方法,这种方法需要你的整个数据集先放在一台机器的内存中。
val lines = sc.parallelize(List("pandas","i like pandas")) #val定义一个常量
返回结果:lines: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:24
  2、从外部存储中读取数据来创建RDD
val lines = sc.textFile("/user/yz_dw3_pro/test/READme.md")
返回结果:lines: org.apache.spark.rdd.RDD[String] = /user/yz_dw3_pro/test//READme.md MapPartitionsRDD[2] at textFile at <console>:24

RDD转化操作:

val inputRDD = sc.textFile("/user/yz_dw3_pro/test/READme.md")
val errorRDD = inputRDD.filter(line => line.contains("error"))
返回结果:errorRDD: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[8] at filter at <console>:26

RDD行动操作:

println("input number is"+ inputRDD.count() +"numbers")
println("Here is 3 examples:")
inputRDD.take(3).foreach(println)
输出结果:input number is5numbers  
       Here is 3 examples:
      Ilike python
      Ilike python
      Ilike python
inputRDD.collect().foreach(println) #collect收集整个RDD的数据,保证在单台机器的内存中能放得下时,才能使用
inputRDD.persist() #persist操作会把这个RDD缓存下来