RDD有两种操作:transformations和actions。transformations在一个RDD上进行有用的数据操作得到一个新的RDD。actions触发计算过程并且返回结果。Spark的transformation是“lazy”的,意味着它在遇到actions前不会触发真正的计算过程。
创建RDD
RDD(Resilient Distributed Dataset),即弹性分布式数据集,可以通过使用它很方便地将数据存储到磁盘和内存中,并能控制数据的分区数。
1、数据集合
val data = Array(1,2,3,4,5,6)
//3是分区数
val dataRDD = sc.parallelize(data,3)
每一个分区对应一个对应的任务Task。默认情况下集群中的每一个CPU对应运行2-4个分片。Spark会根据实际情况自行设定分片数量,但也可以自定义,如上面的3。
2、外部数据源
Spark支持文本文件、序列文件以及其他Hadoop支持的输入格式文件。
//当前目录文件
val dataRDD1 = sc.textFile("data.txt")
//HDFS文件,并指定3个分区
val dataRDD2 = sc.textFile("hdfs://<ip>:<port>/input/data.txt",3)
//本地文件
val dataRDD3= sc.textFile("/input/data.txt")
//多个文件
val dataRDD4 = sc.textFile("/input/001.txt","/input/002.txt")
//通配符
val dataRDD5 = sc.textFile("/input/*.txt")
transformations
map
map允许使用一个函数作用于rdd中所有的数据。
val rdd1 = sc.parallelize(1 to 9,3)
val rdd2 = rdd1.map(x=>x*2)
println(rdd2.map(x => x.toString).reduce((x,y) => x + "," + y))
2,4,6,8,10,12,14,16,18
filter
对RDD中的元素记性过滤
val rdd3 = rdd2.filter(x=>x>10)
println(rdd3.map(x => x.toString).reduce((x,y) => x + "," + y))
12,14,16,18
flatMap
在map功能的基础上添加了扁平化
val rdd4 = rdd3.flatMap(x=>x to 20)
println(rdd4.map(x => x.toString).reduce((x,y) => x + "," + y))

最低0.47元/天 解锁文章
2045

被折叠的 条评论
为什么被折叠?



