spark有四種部署方式:Local,Standalone,Spark on Mesos,Spark on yarn。第一個(gè)為單機(jī)模式,后三個(gè)為集群模式。
spark-shell支持python和scala,這里使用python。
1.啟動(dòng)pyspark環(huán)境
在spark安裝目錄下
./bin/pyspark
進(jìn)入之后,如下圖:?
2.編寫程序
新建代碼文件WordCount.py,并編寫程序
touch WordCount.py
vim WordCount.py
from pyspark import SparkConf, SparkContext
# 使用本地模式啟動(dòng)
conf = SparkConf().setMaster("local").setAppName("My App")
# 生成一個(gè)SparkContext對(duì)象
sc = SparkContext(conf=conf)
# 設(shè)置文件路徑
logFile = "file:///opt/servers/spark/README.md"
# 讀取README.md文件生成的RDD
logData = sc.textFile(logFile, 2).cache()
# 分別統(tǒng)計(jì)RDD元素中包含字母a和b的行數(shù)
numAS = logData.filter(lambda line: 'a' in line).count()
numBs = logData.filter(lambda line: 'b' in line).count()
# 打印輸出結(jié)果
print('Lines with a: %s, Lines with b: %s' % (numAS, numBs))
運(yùn)行代碼:python3 WordCount.py
如果報(bào)如下錯(cuò)誤:
python3 WordCount.py
Traceback (most recent call last):
? File "WordCount.py", line 1, in <module>
? ? from pyspark import SparkConf, SparkContext
ModuleNotFoundError: No module named 'pyspark'
說(shuō)明沒有pyspark模塊。
進(jìn)入python安裝目錄下的lib/site-packages目錄下,使用pip下載安裝pyspark,這里使用國(guó)內(nèi)清華大學(xué)鏡像網(wǎng)站。
pip install pyspark -i http://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
下載一個(gè)鏡像,中間出了好幾個(gè)問題,被我記錄在
pip安裝更新第三方庫(kù)報(bào)錯(cuò)解決-CSDN博客
安裝pyspark庫(kù)成功后,重新運(yùn)行代碼,然后還是報(bào)錯(cuò)
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
/usr/local/python3/lib/python3.7/site-packages/pyspark/context.py:317: FutureWarning: Python 3.7 support is deprecated in Spark 3.4.
? warnings.warn("Python 3.7 support is deprecated in Spark 3.4.", FutureWarning)
Traceback (most recent call last):
? File "WordCount.py", line 11, in <module>
? ? numAS = logData.filter(lambda line: 'a' in line).count()
? File "/usr/local/python3/lib/python3.7/site-packages/pyspark/rdd.py", line 2297, in count
? ? return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum()
? File "/usr/local/python3/lib/python3.7/site-packages/pyspark/rdd.py", line 2273, in sum
? ? 0, operator.add
? File "/usr/local/python3/lib/python3.7/site-packages/pyspark/rdd.py", line 2025, in fold
? ? vals = self.mapPartitions(func).collect()
? File "/usr/local/python3/lib/python3.7/site-packages/pyspark/rdd.py", line 1814, in collect
? ? sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd())
? File "/usr/local/python3/lib/python3.7/site-packages/pyspark/rdd.py", line 5442, in _jrdd
? ? self.ctx, self.func, self._prev_jrdd_deserializer, self._jrdd_deserializer, profiler
? File "/usr/local/python3/lib/python3.7/site-packages/pyspark/rdd.py", line 5250, in _wrap_function
? ? sc._javaAccumulator,
TypeError: 'JavaPackage' object is not callable
是因?yàn)閜yspark版本過(guò)高, 改成3.2.0版本的就可以了
pip3 install pyspark==3.2.0 -i http://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
Looking in indexes: http://pypi.tuna.tsinghua.edu.cn/simple/
再次運(yùn)行代碼,運(yùn)行結(jié)果如下:
3.通過(guò)spark-submit運(yùn)行程序
進(jìn)入spark安裝目錄下的bin中
./spark-submit WordCound.py的絕對(duì)路徑
省略了<master-url>參數(shù),默認(rèn)本地模式
運(yùn)行結(jié)果如下 (部分截圖):
?在這個(gè)過(guò)程中產(chǎn)生了許多其他信息干擾,可以通過(guò)修改log4j的日志信息顯示級(jí)別,來(lái)消除干擾信息。
進(jìn)入spark安裝目錄下的配置文件夾conf
cp log4j2.properties.template log4j2.properties
我的是spark-3.3.3版本,日志文件名字為log4j2.properties.template,每個(gè)版本的日志文件名字不太一樣,具體的,要按照自己安裝的版本的日志文件來(lái),復(fù)制日志文件。
編輯日志文件
vim log4j2.properties
把顯示控制臺(tái)的信息改為error,保存并退出。
再次使用spark-submit運(yùn)行python文件,結(jié)果如下
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-851305.html
已經(jīng)沒有其他信息干擾了。?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-851305.html
到了這里,關(guān)于spark-shell(pyspark)單機(jī)模式使用和編寫?yīng)毩?yīng)用程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!