Spark Rdd算子

这篇博客深入探讨了Spark的RDD操作,包括如何创建Spark Context和弹性分布式数据集(RDD)。详细介绍了各种转换算子,如map、filter、flatMap、mapPartitions等,以及动作算子,如count、collect、take等。同时,还涵盖了reduceByKey、groupByKey、repartition、coalesce、sample、sortBy等关键操作。
摘要由CSDN通过智能技术生成
s(1)创建spark context
val conf: SparkConf = new SparkConf().setAppName("transactionRDD").setMaster("local[2]")
val sc = new SparkContext(conf)
(2)创建rdd:弹性分布式数据集
--使用内存集合创建
创建rdd的方式,不设置分区数,默认分区数是核数:local[num]
val rdd1: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6),3)
val rdd2: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7),4)

--使用本地文件创建RDD(单个文件)
val rdd3: RDD[String] = sc.textFile("file:///E:\\MyEclipse\\review\\spark\\fuxi\\data\\文件1")

----使用本地文件创建RDD(批量文件)
val rdd3: RDD[String] = sc.wholeTextFile("file:///E:\\MyEclipse\\review\\spark\\fuxi\\data")
返回结果是:key和value形式,key是文件名,value是文件内容

--使用HDFS文件创建RDD
val rdd3: RDD[String] = sc.textFile("hdfs:///192.168.190.151:9000/opt/data/hello.txt")
转换算子(map)
//创建一个spark context
val conf: SparkConf = new SparkConf().setAppName("transactionRDD").setMaster("local[2]")
val sc = new SparkContext(conf)
  
//创建rdd
private val a: RDD[Int] = sc.parallelize(1 to 10)

//将a的每一个元素全都乘2,形成一个新的rdd
val b: RDD[Int] = a.map(x => x * 2)

//map将一个普通的rdd变为pairRDD
val c: RDD[(Int, Int)] = a.map(x => (x, 1))

//输出
b.collect().foreach(println)
2
4
6
8
10
12
14
16
18
20

c.collect().foreach(println)
(1,1)
(2,1)
(3,1)
(4,1)
(5,1)
(6,1)
(7,1)
(8,1)
(9,1)
(10,1)
转换算子(filter)
val a: RDD[Int] = sc.parallelize(1 to 10)

//过滤出a中的偶数,形成新的算子b
val b: RDD[Int] = a.filter(x => x % 2 == 0)

b.collect().foreach(println)
2
4
6
8
10
转换算子(flaterMap)
flatMap:该算子由两部分组成,先是Map()就是遍历对每个元素进行操作,然后flatten()即展开

wordcount:单词统计举例
val rdd3: RDD[String] = sc.textFile("file:///E:\\hello.txt")

hello.txt文件内容:
hello java
hello china
hello python
hello mysql
good good study

rdd3.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).foreach(println)

原理:先是拿到rdd的每一行,然后按空格进行拆分split(),成为一个数组,然后拿到该数组,将数组的值转变为(值,1)元组的这种形式,最后展开flatMap(),例如(hello,1),(java,1),(hello,1),然后通过reduceByKey()对相同key的值进行相加,最终输出

最终结果:
(python,2)
(up,1)
(day,2)
(good,4)
(mysql,2)
(china,2)
(hello,8)
(study,2)
(java,2)
转换算子(mapPartitions)
mapPartitions:mapPartitions对每一个分区的数据进行操作,可以先用mapPartitions拿到每一个分区的数据,再用map对当前分区的每一个元素进行操作

val a: RDD[Int] = sc.parallelize(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值