PySpark實(shí)戰(zhàn)筆記系列第一篇
RDD概念
Apache Spark的核心組件的基礎(chǔ)是RDD。所謂的RDD,即彈性分布式數(shù)據(jù)集(Resiliennt Distributed Datasets),基于RDD可以實(shí)現(xiàn)Apache Spark各個(gè)組件在多個(gè)計(jì)算機(jī)組成的集群中進(jìn)行無縫集成,從而能夠在一個(gè)應(yīng)用程序中完成海量數(shù)據(jù)處理。
RDD特點(diǎn)
- 只讀不能修改:只能通過轉(zhuǎn)換操作生成一個(gè)新的RDD。
- 分布式存儲(chǔ):一個(gè)RDD通過分區(qū)可以分布在多臺(tái)機(jī)器上進(jìn)行并行數(shù)據(jù)處理。
- 內(nèi)存計(jì)算:可以將全部或部分?jǐn)?shù)據(jù)緩存在內(nèi)存中,且可在多次計(jì)算過程中重用。
- 具有彈性:在計(jì)算過程中,當(dāng)內(nèi)存不足時(shí),可以將一部分?jǐn)?shù)據(jù)落到磁盤上處理
建立RDD的方式
- 用parallelize方法建立RDD:這種方式非常簡單,主要用于進(jìn)行練習(xí)或者測試。
- 用range方法建立RDD:這種方式和parallelize方法類似,一般來說主要用于進(jìn)行測試。
- 使用textFile方法建立RDD:這種方式一般用于在本地臨時(shí)性地處理一些存儲(chǔ)了大量數(shù)據(jù)的文件。它依賴本地文件系統(tǒng),因此可以不需要Hadoop環(huán)境。
- 使用HDFS建立RDD:這種方式使用HDFS文件建立RDD,需要依賴Hadoop集群環(huán)境,它應(yīng)該是最常用的一種生產(chǎn)環(huán)境下的數(shù)據(jù)處理方式。它可以針對(duì)HDFS上存儲(chǔ)的海量數(shù)據(jù),進(jìn)行離線批處理操作。
不同工具建立RDD的方式
使用PySpark Shell(交互環(huán)境)建立RDD
在安裝完成Spark環(huán)境后,就具備了Shell這款工具。其中,Spark Shell是針對(duì)Scala語言的,而PySpark Shell則是針對(duì)Python語言的。
使用PySpark Shell工具的方式,在命令行輸入如下命令:pyspark
PySpark Shell默認(rèn)會(huì)自動(dòng)創(chuàng)建sc對(duì)象和spark對(duì)象,因此可以在交互環(huán)境中直接進(jìn)行調(diào)用,而無須手動(dòng)創(chuàng)建。這里,sc對(duì)象是SparkContext的實(shí)例,而spark對(duì)象是SparkSession的實(shí)例。
使用VSCode編程建立RDD
在VSCode中以編程方式需要手動(dòng)創(chuàng)建SparkContext實(shí)例。
- 首先需要用from pyspark import SparkConf, SparkContext導(dǎo)入SparkConf和SparkContext。
- conf=SparkConf().setAppName(“WordCount”).setMaster("local[**]")**創(chuàng)建了一個(gè)SparkConf實(shí)例,其中用setAppName設(shè)置了本次程序的名稱,用setMaster設(shè)置了Spark Master的方式為local[]。
- **sc=SparkContext(conf=conf)**創(chuàng)建SparkContext實(shí)例sc,這與PySparkShell默認(rèn)創(chuàng)建的sc對(duì)象類似。
- SparkContext不能一次運(yùn)行多個(gè),否則會(huì)報(bào)ValueError: Cannot run multipleSparkContexts at once; existing SparkContext的錯(cuò)誤。因此需要用sc.stop()命令關(guān)閉SparkContext實(shí)例對(duì)象。
需要用pip3 install findspark命令安裝findspark,否則可能會(huì)提示無法找到pyspark模塊的錯(cuò)誤:ModuleNotFoundError: No module named ‘pyspark’。
示例界面:
使用Jupyter Notebook建立RDD
編碼方式類似VS Code,不過它的好處是:
- 可以對(duì)多個(gè)代碼以文件的形式進(jìn)行組織,
- 可以用于編寫文檔。
- 更高級(jí)的是可以顯示圖形和運(yùn)算結(jié)果。
- 因此使用這種基于Web的部署方式,可以讓多個(gè)客戶端同時(shí)使用,且可共享代碼示例,真正做到圖文并茂地進(jìn)行編程。
總結(jié)
** 1.sc對(duì)象的兩種創(chuàng)建方式:**
"""
方式一:通過SparkConf創(chuàng)建
"""
from pyspark import SparkConf,SparkContext
# 創(chuàng)建SparkContext,即sc對(duì)象
conf = SparkConf().setAppName("Demo")\
.setMaster("local[*]")
sc = SparkContext(conf=conf)
"""
方式二:通過SparkSession創(chuàng)建
"""
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.master("local[*]") \
.appName("Demo") \
.getOrCreate();
# 創(chuàng)建SparkContext,即sc對(duì)象
sc = spark.sparkContext
2.完整的常用pyspark編程開頭示例
根據(jù)上述兩種sc的創(chuàng)建方式,對(duì)應(yīng)的常用的編程開頭方式即在上述樣例的開頭,加上如下代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-844719.html
import findspark
findspark.init()
參考資料:《Python大數(shù)據(jù)處理庫PySpark實(shí)戰(zhàn)》文章來源地址http://www.zghlxwxcb.cn/news/detail-844719.html
到了這里,關(guān)于10-用PySpark建立第一個(gè)Spark RDD的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!