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

參考鏈接:

  1. 使用pyspark & spark thrift server的使用
  2. Mac下安裝spark,並配置pycharm-pyspark完整教程
    【備註,這裏的pycharm的環境配置的所有操作我都沒有做,但是還是能正常運行,所以我覺得不用配置pycharm環境】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章