日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

2021年大数据Spark(十六):Spark Core的RDD算子练习

發(fā)布時(shí)間:2023/11/28 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021年大数据Spark(十六):Spark Core的RDD算子练习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

RDD算子練習(xí)

map 算子

filter 算子

flatMap 算子

交集、并集、差集、笛卡爾積

distinct 算子

??????????????first、take、top?算子

??????????????keys、values?算子

???????mapValues 算子

???????collectAsMap 算子

???????mapPartitionsWithIndex 算子


RDD算子練習(xí)

????RDD中的函數(shù)有很多,不同業(yè)務(wù)需求使用不同函數(shù)進(jìn)行數(shù)據(jù)處理分析,下面僅僅展示出比較常用的函數(shù)使用,更多函數(shù)在實(shí)際中使用體會(huì),多加練習(xí)理解。

map 算子

對(duì)RDD中的每一個(gè)元素進(jìn)行操作并返回操作的結(jié)果。

//通過(guò)并行化生成rddval rdd1 = sc.parallelize(List(5, 6, 4, 7, 3, 8, 2, 9, 1, 10)) ?//對(duì)rdd1里的每一個(gè)元素rdd1.map(_ * 2).collect ?//collect方法表示收集,是action操作//res4: Array[Int] = Array(10, 12, 8, 14, 6, 16, 4, 18, 2, 20)

?

filter 算子

函數(shù)中返回True的被留下,返回False的被過(guò)濾掉。

val rdd2 = sc.parallelize(List(5, 6, 4, 7, 3, 8, 2, 9, 1, 10))val rdd3 = rdd2.filter(_ >= 10) //大于等于10的留下rdd3.collect //10

?

flatMap 算子

對(duì)RDD中的每一個(gè)元素進(jìn)行先map再壓扁,最后返回操作的結(jié)果。

對(duì)RDD中的每一個(gè)元素進(jìn)行先map再壓扁,最后返回操作的結(jié)果

val rdd1 = sc.parallelize(Array("a b c", "d e f", "h i j"))//將rdd1里面的每一個(gè)元素先切分再壓平val rdd2 = rdd1.flatMap(_.split(' '))//_是每一個(gè)元素,如其中一個(gè):"a b c" ??rdd2.collect//Array[String] = Array(a, b, c, d, e, f, h, i, j)

?

???????交集、并集、差集、笛卡爾積

類似Scala集合類Set中相關(guān)函數(shù),注意類型要一致。

注意類型要一致

val rdd1 = sc.parallelize(List(5, 6, 4, 3))val rdd2 = sc.parallelize(List(1, 2, 3, 4))//union并集不會(huì)去重val rdd3 = rdd1.union(rdd2)?rdd3.collect//Array[Int] = Array(5, 6, 4, 3, 1, 2, 3, 4)//去重rdd3.distinct.collect//求交集val rdd4 = rdd1.intersection(rdd2)rdd4.collect//求差集val rdd5 = rdd1.subtract(rdd2)rdd5.collect//笛卡爾積val rdd1 = sc.parallelize(List("jack", "tom"))//學(xué)生val rdd2 = sc.parallelize(List("java", "python", "scala"))//課程val rdd3 = rdd1.cartesian(rdd2)//可以表示所有學(xué)生的所有可能的選課情況rdd3.collect//Array((jack,java), (jack,python), (jack,scala), (tom,java), (tom,python), (tom,scala))

?

???????distinct 算子

對(duì)RDD中元素進(jìn)行去重,與Scala集合中distinct類似。

val rdd = sc.parallelize(Array(1,2,3,4,5,5,6,7,8,1,2,3,4), 3)rdd.distinct.collect

?

??????????????first、take、top?算子

從RDD中獲取某些元素,比如first為第一個(gè)元素,take為前N個(gè)元素,top為最大的N個(gè)元素。

val rdd1 = sc.parallelize(List(3,6,1,2,4,5))rdd1.top(2)// 6 5//按照原來(lái)的順序取前N個(gè)rdd1.take(2) //3 6//按照原來(lái)的順序取前第一個(gè)rdd1.first

??????????????keys、values?算子

針對(duì)RDD中數(shù)據(jù)類型為KeyValue對(duì)時(shí),獲取所有key和value的值,類似Scala中Map集合。

val rdd1 = sc.parallelize(List("dog", "tiger", "lion", "cat", "panther", "eagle"), 2)val rdd2 = rdd1.map(x => (x.length, x))rdd2.collect//Array[(Int, String)] = Array((3,dog), (5,tiger), (4,lion), (3,cat), (7,panther), (5,eagle))rdd2.keys.collect//Array[Int] = Array(3, 5, 4, 3, 7, 5)rdd2.values.collect//Array[String] = Array(dog, tiger, lion, cat, panther, eagle) ??

???????mapValues 算子

mapValues表示對(duì)RDD中的元素進(jìn)行操作,Key不變,Value變?yōu)椴僮髦?。mapValues表示對(duì)RDD中的元素進(jìn)行操作,Key不變,Value變?yōu)椴僮髦髒al rdd1 = sc.parallelize(List((1,10),(2,20),(3,30)))val rdd2 = rdd1.mapValues(_*2).collect //_表示每一個(gè)value ,key不變,將函數(shù)作用于value// Array[(Int, Int)] = Array((1,20), (2,40), (3,60))

???????collectAsMap 算子

當(dāng)RDD中數(shù)據(jù)類型為Key/Value對(duì)時(shí),轉(zhuǎn)換為Map集合。

val rdd = sc.parallelize(List(("a", 1), ("b", 2)))rdd.collectAsMap//scala.collection.Map[String,Int] = Map(b -> 2, a -> 1)/Map((b ,2), (a , 1)) //Scala中Map底層就是多個(gè)二元組

???????mapPartitionsWithIndex 算子

取分區(qū)中對(duì)應(yīng)的數(shù)據(jù)時(shí),還可以將分區(qū)的編號(hào)取出來(lái),這樣就可以知道數(shù)據(jù)是屬于哪個(gè)分區(qū)的。

功能:取分區(qū)中對(duì)應(yīng)的數(shù)據(jù)時(shí),還可以將分區(qū)的編號(hào)取出來(lái),這樣就可以知道數(shù)據(jù)是屬于哪個(gè)分區(qū)的

val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9), 3)//該函數(shù)的功能是將對(duì)應(yīng)分區(qū)中的數(shù)據(jù)取出來(lái),并且?guī)戏謪^(qū)編號(hào)val func = (index: Int, iter: Iterator[Int]) => {iter.map(x => "[partID:" + ?index + ", val: " + x + "]")}rdd1.mapPartitionsWithIndex(func).collect//Array[String] = Array(//[partID:0, val: 1], [partID:0, val: 2], [partID:0, val: 3],//[partID:1, val: 4], [partID:1, val: 5], [partID:1, val: 6],//[partID:2, val: 7], [partID:2, val: 8], [partID:2, val: 9]

?

總結(jié)

以上是生活随笔為你收集整理的2021年大数据Spark(十六):Spark Core的RDD算子练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。