adayan0 2020-07-05
RDD:弹性分布式数据集,初学时,可以把RDD看做是一种集合类型(和Array,List类比)
RDD的特点:
①有容错性,即数据丢失是可以恢复的
②有分区机制,可以并行的处理RDD数据
创建RDD的2种方式:
①将一个普通的集合类型(Array或List)
②通过Spark读取外部存储文件,将文件数据转变为RDD。可以从本地磁盘读取,也可以从HDFS读取
RDD的分区机制目的:可以分布式的计算RDD的数据集,底层可以确保分区数据的负载均衡状态
在bin目录下执行:sh spark-shell --master=local
1.sc是SparkContext的别名对象,用于操作spark的入口对象,通过sc可以创建RDD,广播变量,此外sc用于负载job任务的分配和监控
2.创建RDD的方法:
①sc.parallelize(普通集合,分区数量)
②sc.makeRDD(普通集合,分区数量)
3.关于RDD分区的相关方法
①rdd.partitions.size 查看分区数量
②rdd.glom.collect 查看分区数据
4.创建RDD的两种途径:
①将一个普通集合转变为RDD
②读取外部文件,转变为RDD :
方法: sc.textFile(路径,分区数)
补充:file:// 本地文件协议 => sc.textFile("file:///home/words.txt",2)
hdfs://HDFS文件系统协议 => sc.textFile("hdfs://hadoop101:9000/words.txt",2)
两类操作:
1.Transformation 变换操作:都是懒方法,即调用之后并没有马上执行
1.Action 执行操作:触发执行
案例:通过rdd实现统计文件中的单词数量,并输出到文件系统
本地:sc.textFile("/root/work/words.txt").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/root/work/wcresult")
hdfs:
val rdd = sc.textFile("hdfs://hadoop101:9000/words.txt",2)
val result = rdd.flatMap(_.split("")).map((_,1)).reduceByKey(_+_)
result.saveAsTextFile("hdfs://hadoop101:9000/wordresult")