02、體驗Spark shell下RDD編程

02、體驗Spark shell下RDD編程

1、Spark RDD介紹

RDD是Resilient Distributed Dataset,中文翻譯是彈性分布式數據集。該類是Spark是核心類成員之一,是貫穿Spark編程的始終。初期階段,我們可以把RDD看成是Java中的集合就可以了,在后面的章節中會詳細講解RDD的內部結構和工作原理。

2、Spark-shell下實現對本地文件的單詞統計

2.1思路

word count是大數據學習的經典案例,很多功能實現都可以歸結為是word count的使用。工作過程為使用SparkContext對象的textFile方法加載文件形成Spark RDD1,RDD1中每個元素就是文件中的每一行文本,然后對RDD的每個元素進行壓扁flatMap操作,形成RDD2,RDD2中每個元素是將RDD1的每行拆分出來產生的單詞,因此RDD2就是單詞的集合,然后再對RDD2進行標一成對,形成(單詞,1)的元組的集合RDD3,最后對RDD3進行按照key進行聚合操作形成RDD4,最終將RDD4計算后得到的集合就是每個單詞的數量

2.2 處理流程

App->SparkContext: textFile加載文件
SparkContext->RDD1: 創建RDD
RDD1-->App: 返回RDD1
App->RDD1: flatMap壓扁操作
RDD1->RDD2: 產生RDD2
RDD2-->App: 返回RDD2
App->RDD2: map標一成對
RDD2->RDD3: 產生RDD3
RDD3-->App: 返回RDD3
App->RDD3: reduceByKey聚合
RDD3->RDD4: 產生RDD4
RDD4-->App: 返回RDD4
App->RDD4: collect收集結果數據

2.3 分步實現代碼

// 進入spark shell環境
$>spark-shell// 1.加載文件
scala>val rdd1 = sc.textFile("file:///homec/centos/1.txt")// 2.壓扁每行
scala>val rdd2 = rdd1.flatMap(_.split(" ")) // 3.標1成對
scala>val rdd3 = rdd2.map(w=>(w,1))// 4.按照key聚合每個key下的所有值
scala>val rdd4 = rdd3.reduceByKey(_+_)// 5.顯式數據
scala>rdd4.collect()

2.4 一步實現代碼

$scala>sc.textFile("file:///home/centos/1.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

3、Spark-shell下實現對氣溫數據的最大最小聚合

3.1 思路分析

氣溫數據數各年度內氣溫列表,將每一行變換成(year,temp)元組后,按照yearn進行聚合即可。

3.2 處理流程

App->SparkContext: textFile加載文件
SparkContext->RDD1: 產生RDD1
RDD1-->App: 返回RDD1
App->RDD1: map變換每行為(year,(max,min))元組
RDD1->RDD2: 產生RDD2
RDD2-->App: 返回RDD2
App->RDD2: reduceByKey雙聚合氣溫極值
RDD2->RDD3:產生RDD3
App->RDD3: collect()收集結果

3.3 分步實現代碼

// 進入spark shell環境
$>spark-shell// 1.加載氣溫數據文件
scala>val rdd1 = sc.textFile("/home/centos/temps.dat")// 2.壓扁每行
scala>val rdd2 = rdd1.flatMap(e=>{val arr = e.split(" ")(arr(0).toInt, (arr(1).toInt ,arr(1).toInt))
}) // 3.reduceByKey
scala>val rdd3 = rdd2.reduceByKey((a,b)=>{import scala.math(math.max(a(0),b(0)) , math.min(a(1),b(1)))
})// 4.收集日志
scala>rdd3.collect()

3.4 一步實現代碼

$scala>sc.textFile("file:///home/centos/temps.dat").map(line=>{val arr = line.split(" ")(arr(0).toInt,(arr(1).toInt , arr(1).toInt))}).reduceByKey((a,b)=>{import scala.math(math.max(a(0) , b(0)) , math.min(a(1) , b(1)))}).collect()

轉載于:https://www.cnblogs.com/xupccc/p/9543961.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249628.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249628.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CDH集群安裝配置(四)- mysql 的安裝

安裝mysql,并且創建相關的表(只需要在chd1上面安裝而且需要root權限)1.1 查看Centos自帶mysql是否已經安裝 yum list installed | grep mysql 卸載自帶mariadb# rpm -qa | grep mariadb mariadb-libs-5.5.41-2.el7_0.x86_64 # rpm -e --nodep…

EF另一個 SqlParameterCollection 中已包含 SqlParameter。

代碼&#xff1a; SqlParameter[] commandParameters new SqlParameter[]{new SqlParameter("CultID",filters.ParentID)};var result db.Database.SqlQuery<FM_PlantSolutions>("select s.* ,u.UserName as PrincipalName,isnull(ue.UserName,無) as E…

2019 GUDT RC 2 Problem C(題解)

原題 題目大意 這道題的背景是農夫和牛爬山,給出山的高度L,農夫會從山底以rF的速度爬山,中途不會休息,牛會從山底以rB的速度爬山,可以在休息站休息并吃草,在第i個休息站休息ti時間,牛可以吃t*ci的草,第i個休息站的高度為xi.農夫和牛同時出發,要求牛在不被農夫追上的同時吃最多的…

maven setting.xml 中文配置詳解(全配置)

<?xml version"1.0" encoding"UTF-8"?> <!--| 官方文檔: https://maven.apache.org/settings.html|| Maven 提供以下兩種 level 的配置:|| 1. User Level. 當前用戶獨享的配置, 通常在 ${user.home}/.m2/settings.xml 目錄下。 | …

String/Stringbuilder/StringBuffer

三個的運行速度&#xff1a;Stringbuilder>Stringbuffer>String String最慢是因為它是字符串常量&#xff0c;而其他兩個是字符串變量。其中stringbuilder是非線程安全的、stringbuffer是線程安全的Stringbuilder適用于單線程且數據量大的字符串操作Stringbuffer適用于多…

CCF 差分約束--201809再賣菜

問題描述 在一條街上有n個賣菜的商店&#xff0c;按1至n的順序排成一排&#xff0c;這些商店都賣一種蔬菜。   第一天&#xff0c;每個商店都自己定了一個正整數的價格。店主們希望自己的菜價和其他商店的一致&#xff0c;第二天&#xff0c;每一家商店都會根據他自己和相鄰商…

Express + Element-ui 實現圖片/文件上傳

使用第三方插件 formidable 處理表單數據/文件 Express 4 以前&#xff0c;我們通常使用 req.files 來對請求中的文件進行處理&#xff0c;但在 Express 4 中這種用法已經被拋棄&#xff0c;默認情況下 req.files 在 req 對象上不再可用。官方推薦我們使用第三方中間件。 在這里…

weblogic12.1.3安裝

weblogic weblogic12.1.3安裝 環境&#xff1a; centos7.5 ip: 192.168.0.94 1、安裝jdk 2、安裝 weblogic 下載、解壓安裝包 wls1213_dev.zip unzip /application/weblogic12/wls1213_dev.zip mv wls12130 /application/weblogic12/ 配置環境變量 配置主機名解析 運行安裝…

閉包那些事

定義&#xff1a; 在一個內部函數里&#xff0c; 對在外部作用域&#xff08;但不是在全局作用域&#xff09; 的變量進行引用&#xff0c; 那么內部函數就被認為是閉包&#xff08;closure&#xff09;。 例子&#xff1a; 1 def make_adder(addend):2 def adder(augend):3 …

10-04 矩形覆蓋(斐波那契數列的應用)

題目描述&#xff1a; 我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形&#xff0c;總共有多少種方法&#xff1f; 解題思路與代碼&#xff1a; 1&#xff09; 排列組合&#xff1a; class Solution { public:int rectC…

Spring 源碼分析 spring-core

先來看下 spring-core 的包結構 總共有6個模塊&#xff0c;分別是 asm、cglib、core、lang、objenesis、util asm包&#xff1a; 用來操作字節碼&#xff0c;動態生成類或者增強既有類的功能。主要包含以下這些類。詳細功能。 https://www.ibm.com/developerworks/cn/java/j…

logging 模塊

一、logging模塊級別及常用函數 默認的level是logging.Warning,低于該級別的就不輸出了。級別排序:Critical> Error > Warning > Info > Debug Logging.Formatter&#xff1a;配置日志的格式&#xff0c;在里面自定義設置日期和時間&#xff0c;輸出日志的時候將會…

大數據項目中的QA需要迎接新的挑戰

大數據項目中的QA需要迎接新的挑戰根據IDC全球半年度大數據和分析支出指南的最新預測&#xff0c;到2022年全球大數據和業務分析解決方案的收入將達到2600億美元。在大數據和業務分析解決方案上投資增長最快的行業包括銀行&#xff08;復合年增長率13.3%&#xff09;、醫療、保…

spring源碼分析之spring-core總結篇

1.spring-core概覽 spring-core是spring框架的基石&#xff0c;它為spring框架提供了基礎的支持。 spring-core從源碼上看&#xff0c;分為6個package&#xff0c;分別是asm&#xff0c;cglib&#xff0c;core&#xff0c;lang&#xff0c;objenesis和util。 1.1 asm 關于as…

五分鐘搞懂后綴數組!

為什么學后綴數組 后綴數組是一個比較強大的處理字符串的算法&#xff0c;是有關字符串的基礎算法&#xff0c;所以必須掌握。 學會后綴自動機(SAM)就不用學后綴數組(SA)了&#xff1f;不&#xff0c;雖然SAM看起來更為強大和全面&#xff0c;但是有些SAM解決不了的問題能被SA解…

spring-core

spring最核心的組件是BeanFactory&#xff0c;看了源碼才發現&#xff0c;BeanFactory并非定義在spring-core中&#xff0c;那spring-core都有啥東東&#xff1f; spring-core主要提供以下服務&#xff0c;為BeanFactory的定義提供基礎服務。 1, ConversionService Conversi…

nginx配置靜態文件過期時間

1. 編輯虛擬主機配置文件/usr/local/nginx/conf/vhosts/huangzhenping.conf 說明&#xff1a;采用location方式 12345678910location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${access_log off;expires 1d;}location ~ \.(js|css){access_log off;expires 1d;}2. 檢查配置文件&#x…

vue 移動端在div上綁定click事件 失效

在.vue的文件中使用了better-scroll&#xff0c;在div標簽上綁定click事件后&#xff0c;無效。 原因&#xff1a;使用了better-scroll&#xff0c;默認它會阻止touch事件。所以在配置中需要加上click: true 即可解決 mounted(){this.$nextTick(() > {let bscrollDom this.…

Java中的鉤子方法

鉤子方法是啥 鉤子顧名思義就是用來掛東西的。那么要掛東西必須有個被掛的東西&#xff0c;要不就是鐵環、要不就是墻的邊沿。所以要能掛住東西必須要有個被勾住的鐵環&#xff0c;要一個鉤子。那么在java中也是同樣的原理&#xff0c;你首先需要一個被掛在的東西&#xff0c;一…