spark rdd基础学习

RDD(Resilient Distributed Dataset)弹性分布式数据集
可以用两种方法创建rdd:
(1)sc.parallelize()
(2)sc.textFile()

spark可以从多个文件系统中读取数据:HDFS,本地数据系统
支持多种数据格式:文本,JSON,HIVE
TABLES等,可以处理压缩数据集

rdd是无schema的数据结构,因此可以混合使用各种类型的数据结构:tuple,dict,list

从文本文件读取数据时,文件中的每一行形成了RDD的一个元素

三种运算
1)转换(transformation):转换运算后的结果是产生另一个rdd,但是他不会立即执行而是等到动作时才实际运行
2)动作(action):执行动作运算后,不会产生另外一个rdd。他会产生数值,数组或写入文件系统
3)持久化(persistence):对于重复使用的rdd,可以将其持久化在内存中后续使用,以提高执行性能

  1. 创建RDD
val intrdd=sc.parallelize(List(3,1,2,5,2))

结果:

scala> intrdd.collect()
res0: Array[Int] = Array(3, 1, 2, 5, 2)

collect()动作之后,rdd转为一个array
在写代码时,把List的首字母写成小写就出错?

  1. map运算
    map运算可以通过传入的函数将每一个元素经过函数运算产生另外一个rdd
def addone(x:Int):Int={return (x+1)}
scala> intrdd.map(addone).collect()
res1: Array[Int] = Array(4, 2, 3, 6, 6)

3.filter运算
筛选数字

scala> intrdd.filter(x=>x<3).collect()
res2: Array[Int] = Array(1, 2)

筛选字符串

val stringrdd=sc.parallelize(List('apple','orange',grape'))
stringrdd.filter(x=>x.contains("ra")).collect()

4.去除重复元素

stringrdd.distinct().collect()

5.以随机数按照4:6比例划分两个rdd

val srdd=intrdd.randomSplit(Array(0.4,0.6))

读取分割后的rdd

srdd(0).collect()
srdd(1).collect()

5.grouBy运算可以将数据分为多个array运算

scala> val gdd=intrdd.groupBy(x=>{if (x%2==0)"even" else "odd"}).collect()
gdd: Array[(String, Iterable[Int])] = Array((even,CompactBuffer(2, 2)), (odd,CompactBuffer(3, 1, 5)))

使用gdd(0)和gdd(1)获得偶数和奇数array
6.多个rdd之间的运算
(1)union并集
(2)intersection交集
(3)subtract差集
(4)cartesian笛卡尔积
7.基本的动作运算
(1)读取第一条元素intrdd.first()
(2)读取前3条数据intrdd.take(3)
(3)按照从小到大排序读取前n条

int.rdd.takeOrder(3)[(Ordering[Int].renerse)]

(4)统计功能
intrdd.stats:统计
intrdd.max:最大
intrdd.min:最小
intrdd.stdev:标准偏差
intrdd.count:计数
intrdd.sum:求和
intrdd.mean:平均

8.rdd支持键值运算(key-value)



scala> val
kvrdd1=sc.parallelize(List((3,4),(3,6),(5,6),(1,2)))
kvrdd1: org.apache.spark.rdd.RDD[(Int,
Int)] = ParallelCollectionRDD[3] at parallelize at <console>:24
scala> kvrdd1.keys.collect()
res3: Array[Int] = Array(3, 3, 5, 1)
scala> kvrdd1.values.collect()
res4: Array[Int] = Array(4, 6, 6, 2)
scala> kvrdd1.filter{case
(key,value)=> key<5}.collect()
res5: Array[(Int, Int)] = Array((3,4),
(3,6), (1,2))

mapValues运算可以针对RDD内每一组(key,value)进行运算,并且产生另外一个RDD
(1)对value执行平方运算

scala>
kvrdd1.mapValues(x=>x*x).collect()
res6: Array[(Int, Int)] = Array((3,16), (3,36), (5,36),
(1,4))

(2)sortByKey从小到大按照key排序

scala> kvrdd1.sortByKey().collect()
res7: Array[(Int, Int)] = Array((1,2), (3,4), (3,6), (5,6))

(3)reduceByKey会将具有相同key值的数据合并,合并的方式按照value值的运算

scala> kvrdd1.reduceByKey((x,y)=>x+y).collect()
res8: Array[(Int, Int)] = Array((1,2), (3,10), (5,6))

实在是不习惯scala的使用!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值