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
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缓存下来