pyspark學習--2、pyspark的運行方法嘗試以及各種示例代碼嘗試
運行方法
先使用pycharm構建一個小的項目:環境目錄如下,需要紅框中的兩個文件:
其中 test.json中文件內容如下:
{'name': 'goddy','age': 23}
{'name': 'wcm','age': 31}
test_pyspark.py文件內容如下:
from pyspark.sql import SparkSession
from pyspark.sql.types import *
spark = SparkSession \
.builder \
.appName("goddy-test") \
.getOrCreate()
schema = StructType([
StructField("name", StringType()),
StructField("age", IntegerType())
])
# 這裏路徑可是是相對路徑,但是如果要放到系統的pyspark執行,那要指定絕對路徑,否則會報錯
data = spark.read.schema(schema).json('../data/')
#data = spark.read.schema(schema).json('/Users/ciecus/Documents/pyspark_learning/data/')
data.printSchema()
data.show()
pycharm運行
直接點擊pycharm的運行鍵,結果如下:
系統中的spark運行:spark-submit
(1)索引到spark目錄下
(2)./bin/spark-submit /Users/ciecus/Documents/pyspark_learning/src/test_pyspark.py
運行結果:結果很長,所以需要用grep進行結果過濾,這裏沒有對結果過濾,只截取部分結果
啓動spark任務運行
(1)索引到spark目錄下
(2)啓動master節點
./sbin/start-master.sh
此時,用瀏覽器打開 http://localhost:8080/ ,我們就可以看到spark的管理界面了,從中取到spark master的地址。
(3)啓動slave節點,即工作節點
./sbin/start-slave.sh spark://promote.cache-dns.local:7077
後面的spark地址就是上圖紅框中的地址
此時管理界面,多了一個工作節點。
(4)提交任務到master
這裏也需要絕對路徑
./bin/spark-submit --master spark://promote.cache-dns.local:7077 /Users/ciecus/Documents/pyspark_learning/src/test_pyspark.py
- 分佈式(這裏還沒有嘗試過)
示例運行命令
./bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 520M --executor-memory 520M --executor-cores 1 --num-executors 1 /Users/ciecus/Documents/pyspark_learning/src/test_pyspark.py
執行時可以觀察下管理界面。
點擊application id 查看結果,日誌分成兩個部分,stdout(記錄結果)stderr(記錄錯誤)
- 這裏任務被kill了,查找原因
示例代碼
流式文本處理 streamingcontext
流文本單詞計數
wordcount.py
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
# Create a local StreamingContext with two working thread and batch interval of 1 second
sc = SparkContext("local[2]", "NetworkWordCount")
ssc = StreamingContext(sc, 5)
# Create a DStream that will connect to hostname:port, like localhost:9999
lines = ssc.socketTextStream("localhost", 9999)
# Split each line into words
words = lines.flatMap(lambda line: line.split(" "))
# Count each word in each batch
pairs = words.map(lambda word: (word, 1))
wordCounts = pairs.reduceByKey(lambda x, y: x + y)
# Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.pprint()
ssc.start() # Start the computation
ssc.awaitTermination() #
(1)先到終端運行如下命令:
nc -lk 9999
(按完之後毫無反應,接下來直接執行就行)
(2)在pycharm中運行word_count.py
然後在剛剛的命令行界面輸入:
a b a d d d d
然後摁回車。可以看到pycharm中輸出如下結果:
報錯彙總
(1)執行:./bin/spark-submit /Users/ciecus/Documents/pyspark_learning/src/test_pyspark.py
錯誤:py4j.protocol.Py4JJavaError: An error occurred while calling o31.json.
錯誤原因分析:代碼中文件路徑爲相對路徑,如果在命令行中運行,文件路徑必須爲絕對路徑。
(2)啓動spark任務之後,任務被kill
參考鏈接:
- 使用pyspark & spark thrift server的使用
- Mac下安裝spark,並配置pycharm-pyspark完整教程
【備註,這裏的pycharm的環境配置的所有操作我都沒有做,但是還是能正常運行,所以我覺得不用配置pycharm環境】