ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

寒假学习进度8

2022-01-03 23:33:10  阅读:145  来源: 互联网

标签:val Int 学习 rdd 寒假 进度 sc new sparkConf


今天继续学习spark双value算子

(1)

def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
val sc = new SparkContext(sparkConf)

//双value,数据源类型要保持一致,拉链类型可以不一致

//会报错,因为拉链分区数量要保持一致,并且分区中的数量要一致
val rdd1: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4,5,6),2)
val rdd2: RDD[Int] = sc.makeRDD(List(3, 4, 7, 8),4)

//拉链
val rdd6: RDD[(Int, Int)] = rdd1.zip(rdd2)
println(rdd6.collect().mkString(","))

sc.stop()
}

(2)partitionBy

def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
val sc = new SparkContext(sparkConf)

val rdd = sc.makeRDD(List(1, 2, 3, 4),2)

//将int类型转换成taper类型
val maprdd: RDD[(Int, Int)] = rdd.map((_, 1))

//partitionBy根据指定的分区规则对数据重新分区
maprdd.partitionBy(new HashPartitioner(2)).saveAsTextFile("output")


sc.stop()
}

(3)reduceByKey

def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
val sc = new SparkContext(sparkConf)

val rdd = sc.makeRDD(List(("a",1),("a",2),("a",3),("b",1)))

//reduceByKey,相同的key的数据进行value数据的聚合操作
//[1,2]
//[3,3]
//[6]
val reducerdd: RDD[(String, Int)] = rdd.reduceByKey((x: Int, y: Int) => {
x + y
})

reducerdd.collect().foreach(println)


sc.stop()
}

(4)groupByKey

def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
val sc = new SparkContext(sparkConf)

val rdd = sc.makeRDD(List(("a",1),("a",2),("a",3),("b",1)))

//groupByKey,将数据源中的数据,相同的key分在一个组中,形成一个对偶元祖
val grouprdd: RDD[(String, Iterable[Int])] = rdd.groupByKey()

grouprdd.collect().foreach(println)

sc.stop()
}

(5)aggregateByKey

def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
val sc = new SparkContext(sparkConf)

val rdd = sc.makeRDD(List(("a",1),("a",2),("a",3),("a",4)),2)

//aggregateByKey操作函数柯里化,2个参数列表
//第一个参数列表,需要一个参数,表示初始值
//主要用于第一个key时,和value进行分区计算
//第二个参数列表需要2个参数
//第一个参数表示分区内的计算规则
//第二个参数表示分区间计算规则
rdd.aggregateByKey(0)(
(x,y)=>math.max(x,y),
(x,y)=>x+y
).collect().foreach(println)

sc.stop()
}

标签:val,Int,学习,rdd,寒假,进度,sc,new,sparkConf
来源: https://www.cnblogs.com/chenghaixiang/p/15760921.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有