基于Spark的數(shù)據(jù)分析實(shí)踐

轉(zhuǎn)載本文需注明出處:微信公眾號(hào)EAWorld,違者必究。
引言:
Spark是在借鑒了MapReduce之上發(fā)展而來(lái)的,繼承了其分布式并行計(jì)算的優(yōu)點(diǎn)并改進(jìn)了MapReduce明顯的缺陷。Spark主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等組件。
本文主要分析了 Spark RDD 以及 RDD 作為開(kāi)發(fā)的不足之處,介紹了 SparkSQL 對(duì)已有的常見(jiàn)數(shù)據(jù)系統(tǒng)的操作方法,以及重點(diǎn)介紹了普元在眾多數(shù)據(jù)開(kāi)發(fā)項(xiàng)目中總結(jié)的基于 SparkSQL Flow 開(kāi)發(fā)框架。
目錄:
一、Spark RDD
二、基于Spark RDD數(shù)據(jù)開(kāi)發(fā)的不足
三、SparkSQL
四、SparkSQL Flow
一、Spark RDD
RDD(Resilient Distributed Dataset)叫做彈性分布式數(shù)據(jù)集,是Spark中最基本的數(shù)據(jù)抽象,它代表一個(gè)不可變、可分區(qū)、元素可并行計(jì)算的集合。
RDD具有數(shù)據(jù)流模型的特點(diǎn):自動(dòng)容錯(cuò)、位置感知性調(diào)度和可伸縮性。
//Scala 在內(nèi)存中使用列表創(chuàng)建
val lines = List(“A”, “B”, “C”, “D” …)val rdd:RDD = sc.parallelize(lines);
可左右滑動(dòng)查看代碼
//以文本文件創(chuàng)建
val rdd:RDD[String] = sc.textFile(“hdfs://path/filename”)
可左右滑動(dòng)查看代碼
Spark RDD Partition 分區(qū)劃分

新版本的 Hadoop 已經(jīng)把 BlockSize 改為 128M,也就是說(shuō)每個(gè)分區(qū)處理的數(shù)據(jù)量更大。
Spark 讀取文件分區(qū)的核心原理
本質(zhì)上,Spark 是利用了 Hadoop 的底層對(duì)數(shù)據(jù)進(jìn)行分區(qū)的 API(InputFormat):
public abstract class InputFormat<K,V>{ public abstract List<InputSplit> getSplits(JobContextcontext ) throwsIOException,InterruptedException; public abstract RecordReader<K,V> createRecordReader(InputSplitsplit, TaskAttemptContextcontext )throwsIOException,InterruptedException;}
可左右滑動(dòng)查看代碼
Spark 任務(wù)提交后通過(guò)對(duì)輸入進(jìn)行 Split,在 RDD 構(gòu)造階段,只是判斷是否可 Split(如果參數(shù)異常一定在此階段報(bào)出異常),并且 Split 后每個(gè) InputSplit 都是一個(gè)分區(qū)。只有在Action 算子提交后,才真正用 getSplits 返回的 InputSplit 通過(guò) createRecordReader 獲得每個(gè) Partition 的連接。
然后通過(guò) RecordReader 的 next() 遍歷分區(qū)內(nèi)的數(shù)據(jù)。
Spark RDD 轉(zhuǎn)換函數(shù)和提交函數(shù)

Spark RDD 的眾多函數(shù)可分為兩大類(lèi)Transformation 與 Action。Transformation 與 Action 的區(qū)別在于,對(duì) RDD 進(jìn)行 Transformation 并不會(huì)觸發(fā)計(jì)算:Transformation 方法所產(chǎn)生的 RDD 對(duì)象只會(huì)記錄住該 RDD 所依賴(lài)的 RDD 以及計(jì)算產(chǎn)生該 RDD 的數(shù)據(jù)的方式;只有在用戶(hù)進(jìn)行 Action 操作時(shí),Spark 才會(huì)調(diào)度 RDD 計(jì)算任務(wù),依次為各個(gè) RDD 計(jì)算數(shù)據(jù)。這就是 Spark RDD 內(nèi)函數(shù)的“懶加載”特性。
二、基于Spark RDD數(shù)據(jù)開(kāi)發(fā)的不足
由于MapReduce的shuffle過(guò)程需寫(xiě)磁盤(pán),比較影響性能;而Spark利用RDD技術(shù),計(jì)算在內(nèi)存中流式進(jìn)行。另外 MapReduce計(jì)算框架(API)比較局限, 使用需要關(guān)注的參數(shù)眾多,而Spark則是中間結(jié)果自動(dòng)推斷,通過(guò)對(duì)數(shù)據(jù)集上鏈?zhǔn)綀?zhí)行函數(shù)具備一定的靈活性。
即使 SparkRDD 相對(duì)于 MapReduce 提高很大的便利性,但在使用上仍然有許多問(wèn)題。體現(xiàn)在一下幾個(gè)方面:
RDD 函數(shù)眾多,開(kāi)發(fā)者不容易掌握,部分函數(shù)使用不當(dāng) shuffle時(shí)造成數(shù)據(jù)傾斜影響性能;
RDD 關(guān)注點(diǎn)仍然是Spark太底層的 API,基于 Spark RDD的開(kāi)發(fā)是基于特定語(yǔ)言(Scala,Python,Java)的函數(shù)開(kāi)發(fā),無(wú)法以數(shù)據(jù)的視界來(lái)開(kāi)發(fā)數(shù)據(jù);
對(duì) RDD 轉(zhuǎn)換算子函數(shù)內(nèi)部分常量、變量、廣播變量使用不當(dāng),會(huì)造成不可控的異常;
對(duì)多種數(shù)據(jù)開(kāi)發(fā),需各自開(kāi)發(fā)RDD的轉(zhuǎn)換,樣板代碼較多,無(wú)法有效重利用;
其它在運(yùn)行期可能發(fā)生的異常。如:對(duì)象無(wú)法序列化等運(yùn)行期才能發(fā)現(xiàn)的異常。
發(fā)表評(píng)論
登錄
手機(jī)
驗(yàn)證碼
立即登錄即可訪(fǎng)問(wèn)所有OFweek服務(wù)
還不是會(huì)員?免費(fèi)注冊(cè)
忘記密碼請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-

落地?zé)o錫!京東首個(gè)物流機(jī)器人超級(jí)工廠(chǎng)來(lái)了
-

OpenAI發(fā)布的AI瀏覽器,市場(chǎng)為何反應(yīng)強(qiáng)烈?
-

馬云重返一線(xiàn)督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-

長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
最新活動(dòng)更多
-
即日-5.20立即下載>> 【限時(shí)免費(fèi)】物理場(chǎng)仿真助力生物醫(yī)學(xué)領(lǐng)域技術(shù)創(chuàng)新
-
精彩回顧立即查看>> 【直播】 智測(cè)未來(lái)·2026海克斯康春季產(chǎn)品創(chuàng)新日
-
精彩回顧立即查看>> 【線(xiàn)下論壇】新唐科技×芯唐南京 2026 年度研討會(huì)
-
精彩回顧立即查看>> OFweek 2026(第十五屆)中國(guó)機(jī)器人產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 維科杯· OFweek 2025中國(guó)機(jī)器人行業(yè)年度評(píng)選
-
精彩回顧立即查看>> 【在線(xiàn)會(huì)議】液冷服務(wù)器信號(hào)完整性及冷卻液關(guān)鍵電參數(shù)測(cè)試
推薦專(zhuān)題
- 1 AI狂歡遇上油價(jià)破百,全球股市還能漲多久? | 產(chǎn)聯(lián)看全球
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實(shí)測(cè):中文穩(wěn)、細(xì)節(jié)炸,設(shè)計(jì)師慌了
- 3 6000億美元估值錨定:字節(jié)跳動(dòng)的“去單一化”突圍與估值重構(gòu)
- 4 Tesla AI5芯片最新進(jìn)展總結(jié)
- 5 連夜測(cè)了一波DeepSeek-V4,我發(fā)現(xiàn)它可能只剩“審美”這個(gè)短板了
- 6 熱點(diǎn)丨AI“瑜亮之爭(zhēng)”:既生OpenClaw,何生Hermes?
- 7 AI界的殺豬盤(pán):9秒刪庫(kù)跑路,全員被封號(hào),還繼續(xù)扣錢(qián)!
- 8 2026,人形機(jī)器人只贏了面子
- 9 DeepSeek降價(jià)90%:價(jià)格屠夫不是身份,是戰(zhàn)略
- 10 AI Infra產(chǎn)業(yè)鏈卡在哪里了?
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市


分享





