什么是RDD(Resilient Distributed Datasets)
1.RDD是将数据项拆分为多个分区的集合,存储在集群的工作节点上的内存和磁盘中,并执行正确的操作
RDD是用于数据转换的接口
2.RDD指向了存储在HDFS、Cassandra、HBase等、或缓存(内存、内存+磁盘、仅磁盘等),或在故障或缓存收回时重新计算其他RDD分区中的数据
3.分布式数据集
RDD是只读的、分区记录的集合,每个分区分布在集群的不同节点上
RDD并不存储真正的数据,只是对数据和操作的描述
4.弹性
RDD默认存放在内存中,当内存不足,Spark自动将RDD写入磁盘
5.容错性
根据数据血统,可以自动从节点失败中恢复分区
val rdd=sc.makeRDDArray(“hello”,“java”,“scala”)
1.map 和 flatMap
rdd.flatMap(x=>x.split(",")).collect
res24: Array[String] = Array(hello, java, hello)
rdd.map(x=>x.split(",")).collect
res25: Array[Array[String]] = Array(Array(hello), Array(java), Array(hello))
2.reduceByKey和groupByKey的区别
https://www.cnblogs.com/zzhangyuhang/p/9001523.html
3.宽窄依赖
数据迁移的宽依赖 反之则是窄依赖
map 窄
flatMap 窄
filter 窄
reduceByKey 宽
sortByKey 宽
distinct 宽
groupByKey 宽
4.现有客户信息文件customers.csv,请找出:
客户中的前5个最大家族
【客户中的前10个最流行的名字】
val conf=new SparkConf.setMaster("local[*]").setAppName("ABB")
val sc=SparkContext.getOrCreate(conf)
val rdd=sc.textFile("in/customers.csv")
rdd.map(x=>(x.split(",")(2),1)) //split之后每个Array取第三个位置的数据
.reduceByKey(_+_) //
.map(x=>x.swap)
.sortByKey(false)
.map(x=>(x._1,x._2.replace("\"","")))
.take(5)
split之后是一行一个Array 如图 取想要的位置的数据
map(x=>(split(",") (2),1)) 效果
reduceByKey(_+_) 效果
map(x=>x.swap) 效果
sortByKey(false)
map(x=>(x._1,x._2.replcace(""","")) 效果
take(5) 效果