教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

創(chuàng)建RDD的2種方法【大數(shù)據(jù)開發(fā)】

更新時(shí)間:2022年03月07日18時(shí)36分 來源:傳智教育 瀏覽次數(shù):

Spark RDD 編程的程序入口對象是SparkContext對象(不論何種編程語言)。只有構(gòu)建出SparkContext, 基于它才能執(zhí)行后續(xù)的API調(diào)用和計(jì)算 。本質(zhì)上, SparkContext對編程來說, 主要功能就是創(chuàng)建第一個(gè)RDD出來。

RDD的創(chuàng)建可以通過2種方式, 通過并行化集合創(chuàng)建( 本地對象轉(zhuǎn)分布式RDD )和通過讀取外部數(shù)據(jù)源( 讀取文件)創(chuàng)建。

1.并行化創(chuàng)建

并行化創(chuàng)建是指將本地集合轉(zhuǎn)向分布式RDD,這一步的創(chuàng)建是分布式的開端,將本地集合轉(zhuǎn)化為分布式集合。

API如下

rdd=sparkcontext.parallelize(參數(shù)1,參數(shù)2)
#參數(shù)1集合對象即可,比如list
#參數(shù)2分區(qū)數(shù)
完整代碼:
# coding: utf8

from pyspark import SparkConf, SparkContext

if __name__ = '__main__': 
	# e.構(gòu)建Spark執(zhí)行環(huán)境
	conf = SparkConf().setAppName("create rdd").\
	    setMaster("local[*]"]
	sc = SparkContext(conf = conf)

# sc對象的parallelize方法, 可以將本地集合轉(zhuǎn)換成RDD返回給你
	data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
	rdd = sc.parallelize(data, numSlices = 3)
	
	print(rdd.collect())

獲取RDD分區(qū)數(shù)返回值是Int數(shù)字:getNumPartitions API

用法
rdd.getNumPartitions()

2.讀取文件創(chuàng)建

textFile API

這個(gè)API可以讀取本地?cái)?shù)據(jù),也可以讀取hdfs數(shù)據(jù)

使用方法:

sparkcontext.textFile(參數(shù)1,參數(shù)2)
#參數(shù)1,必填,文件路徑支持本地文件支持HDFS也支持一些比如S3協(xié)議
#參數(shù)2,可選,表示最小分區(qū)數(shù)量。
#注意:參數(shù)2話語權(quán)不足,spark有自己的判斷,在它允許的范圍內(nèi),參數(shù)2有效果,超出spark允許的范圍,參數(shù)2失效
完整代碼
1f __nane__ = '__main__:
   # B.構(gòu)建Spark執(zhí)行環(huán)境
   conf = SparkConf().setAppNane("create rdd").\
      setMaster("local[*]")
   sc = SparkContext(conf=conf)
   # textFile API 讀取文件
   rdd = sc.textFile(".…/data/words.txt", 1000)
   print(rdd.getNumPartitions())

   rdd2 = sc.textFile("hdfs://nodel:8020/input/words.txt", 1888)
   #最小分區(qū)數(shù)給了1060,但是實(shí)際就開了85個(gè), spark沒有理會(huì)你要求最少1008的要求,而是盡是多開。
   print(rdd2.getNumPartitions())
   
   print(rdd2.collect())

注意:textFile除非有很明確的指向性,一般情況下,我們不是指分區(qū)參數(shù)。

讀取文件的API,有個(gè)小文件讀取專用場景:適合讀取一堆小文件
用法:

 sparkcontext.wholeTextFiles(參數(shù)1,參數(shù)2)
#參數(shù)1,必填,文件路徑支持本地文件支持HDFS也支持一些比如S3協(xié)議
#參數(shù)2,可選,表示最小分區(qū)數(shù)量。
#注意:參數(shù)2話語權(quán)不足,這個(gè)API分區(qū)數(shù)量最多也只能開到文件數(shù)量

這個(gè)API偏向于少量分區(qū)讀取數(shù)據(jù),因?yàn)檫@個(gè)API表明了自己是小文件讀取專用,那么文件的數(shù)據(jù)很小。分區(qū)很多,導(dǎo)致shuffle的幾率更高.所以盡量少分區(qū)讀取數(shù)據(jù)。






猜你喜歡:

RDD在Spark中是如何運(yùn)行的?

DataFrame是什么意思?與RDD相比有哪些優(yōu)點(diǎn)?

RDD為什么要進(jìn)行數(shù)據(jù)持久化?持久化操作步驟

兩種RDD的依賴關(guān)系介紹

傳智教育python+大數(shù)據(jù)開發(fā)培訓(xùn)課程

0 分享到:
和我們在線交談!