1. sortByKey
- 定义:sortByKey([ascending], [numPartitions])
- 解释:按照key值对RDD进行排序,返回一个排序完成RDD
ascending: boolean(true:升序 false:降序)
numPartitions: 分区个数
- 案例:
| def sortByKeyOpt(sc: SparkContext): Unit = { |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val rdd1:RDD[(String,Int)] = rdd.sortByKey(false) |
| rdd1.foreach(println(_)) |
| |
| |
| |
| |
| |
| |
| |
| } |
2. join
- 定义:join(otherDataset, [numPartitions])
- 解释:将两个键值对类型RDD按照相同的key值将不同rdd的value数据整合一下
(K,V) (K,W)===>(K,(V,W)),而且只会保留两个RDD中key值相同的数据,key值不相同的数据舍弃,传入的另外一个键值对类型的RDD有要求,key值必须和当前RDD的key值类型一致,value类型可以不一致
- 案例:
| def joinOpt(sc: SparkContext): Unit = { |
| println("----------------join开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val rdd2:RDD[(String,String)] = sc.makeRDD(Array(("ls","女"),("zs","男"),("zs","女"),("ww","男"),("wb","男"))) |
| val rdd3:RDD[(String,(Int,String))] = rdd.join(rdd2) |
| rdd3.foreach(println(_)) |
| |
| |
| |
| |
| |
| |
| |
| |
| println("----------------join结束------------------") |
| } |
3. leftOuterJoin
- 定义:(K,(V,Option[W]))
- 解释:和join类似,只不过保留左边RDD的所有数据,括号里面的RDD只保留匹配数据
- 案例:
| def leftOuterJoinOpt(sc: SparkContext): Unit = { |
| println("----------------leftOuterJoin开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val rdd2:RDD[(String,String)] = sc.makeRDD(Array(("ls","女"),("zs","男"),("zs","女"),("ww","男"),("wb","男"))) |
| val leftJoin: RDD[(String, (Int, Option[String]))] = rdd.leftOuterJoin(rdd2) |
| leftJoin.foreach(println(_)) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| println("----------------leftOuterJoin结束------------------") |
| } |
4. rightOuterJoin
- 定义:(K,(Option[V],W))
- 解释:和join类似,只不过保留右边RDD的所有数据,左边的RDD只保留匹配(key来匹配)数据
- 案例:
| def rightOuterJoinOpt(sc: SparkContext): Unit = { |
| println("----------------rightOuterJoin开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val rdd2:RDD[(String,String)] = sc.makeRDD(Array(("ls","女"),("zs","男"),("zs","女"),("ww","男"),("wb","男"))) |
| val rightJoin: RDD[(String, (Option[Int], String))] = rdd.rightOuterJoin(rdd2) |
| rightJoin.foreach(println(_)) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| println("----------------rightOuterJoin结束------------------") |
| } |
说明
如果在两个RDD中有重复性的数据出现,出现笛卡尔乘积的情况
5. cogroup
- 定义:cogroup(otherDataset, [numPartitions])
- 解释:将两个键值对类型的RDD按照key值聚合value。将每一个RDD的key值相同的value数据聚合成为一个迭代器Iterable[V]
最终返回如下的一个RDD ,RDD【(key,(Iterable[V],Iterable[W]))】
- 案例:
| def cogroupOpt(sc: SparkContext): Unit = { |
| println("----------------join开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val rdd2:RDD[(String,String)] = sc.makeRDD(Array(("ls","女"),("zs","男"),("zs","女"),("ww","男"),("wb","男"))) |
| val cogroup: RDD[(String, (Iterable[Int], Iterable[String]))] = rdd.cogroup(rdd2) |
| cogroup.foreach(tuple => { |
| println(s"key= ${tuple._1} , value1 = ${tuple._2._1} , value2 = ${tuple._2._2}") |
| }) |
| |
| |
| |
| |
| |
| |
| |
| println("----------------join结束------------------") |
| } |
6.subtractByKey
- 定义:subtractByKey(otherDataSet)
- 解释: 删除前面RDD中与括号传入的RDDkey值相同的元素,返回的是前者RDD删除完成的数据
- 案例:
| def subtractByKeyOpt(sc: SparkContext): Unit = { |
| println("----------------join开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val rdd2:RDD[(String,String)] = sc.makeRDD(Array(("ls","女"),("zs","男"),("zs","女"),("ww","男"),("wb","男"))) |
| val rdd7:RDD[(String,Int)] = rdd.subtractByKey(rdd2) |
| rdd7.foreach(println(_)) // (zl,40) |
| println("----------------join结束------------------") |
| } |
7. keys
- 定义:keys :RDD[key]
- 解释:将键值对类型RDD中的所有key值取出来形成一个新的RDD
- 案例:
| def keysOpt(sc: SparkContext): Unit = { |
| println("----------------join开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val keys: RDD[String] = rdd.keys |
| keys.foreach(println(_)) // zs ls ww zl zs |
| println("----------------join结束------------------") |
| } |
8. values
- 定义:values:RDD[value]
- 解释:将键值对类型RDD中的所有value值取出来形成一个新的RDD
- 案例:
| def valuesOpt(sc: SparkContext): Unit = { |
| println("----------------join开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val values = rdd.values |
| values.foreach(println(_)) // 20 30 40 40 40 |
| println("----------------join结束------------------") |
| } |
9.mapValues(func)
- 定义:func(T)=>U 返回值:RDD[(key,U)]
- 解释:对键值对RDD中所有values数据应用一个func函数,代表对每一个value数据做一个操作 返回一个新的RDD
- 案例:
| def mapValuesOpt(sc: SparkContext): Unit = { |
| println("----------------mapValues开始------------------") |
| val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("zs",20),("ls",30),("ww",40),("zl",40),("zs",40))) |
| val value = rdd.mapValues(_ + 1) |
| |
| |
| |
| |
| |
| |
| |
| value.foreach(println(_)) |
| println("----------------mapValues结束------------------") |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?