windows下pyspark例子——wordcount.py

wordC.py

from __future__ import print_function

import sys
from operator import add

# SparkSession:是一個對Spark的編程入口,取代了原本的SQLContext與HiveContext,方便調用Dataset和DataFrame API
# SparkSession可用於創建DataFrame,將DataFrame註冊爲表,在表上執行SQL,緩存表和讀取parquet文件。
from pyspark.sql import SparkSession

if __name__ == "__main__":

    # Python 常用的簡單參數傳入
    if len(sys.argv) != 2:
        print("Usage: wordcount <file>", file=sys.stderr)
        sys.exit(-1)

    # appName 爲 Spark 應用設定一個應用名,改名會顯示在 Spark Web UI 上
    # 假如SparkSession 已經存在就取得已存在的SparkSession,否則創建一個新的。
    spark = SparkSession \
        .builder \
        .appName("PythonWordCount") \
        .getOrCreate()

    # 讀取傳入的文件內容,並寫入一個新的RDD實例lines中,此條語句所做工作有些多,不適合初學者,可以截成兩條語句以便理解。
    # map是一種轉換函數,將原來RDD的每個數據項通過map中的用戶自定義函數f映射轉變爲一個新的元素。原始RDD中的數據項與新RDD中的數據項是一一對應的關係。
    lines = spark.read.text(sys.argv[1]).rdd.map(lambda r: r[0])

    # flatMap與map類似,但每個元素輸入項都可以被映射到0個或多個的輸出項,最終將結果”扁平化“後輸出
    counts = lines.flatMap(lambda x: x.split(' ')) \
        .map(lambda x: (x, 1)) \
        .reduceByKey(add)

    # collect() 在驅動程序中將數據集的所有元素作爲數組返回。 這在返回足夠小的數據子集的過濾器或其他操作之後通常是有用的。由於collect 是將整個RDD匯聚到一臺機子上,所以通常需要預估返回數據集的大小以免溢出。
    output = counts.collect()

    for (word, count) in output:
        print("%s: %i" % (word, count))

    spark.stop()

再將下列文本拷貝到wordC.py平級目錄下
a.txt

These examples give a quick overview of the Spark API.
Spark is built on the concept of distributed datasets, which contain arbitrary Java or Python objects.

打開cmd,輸入如下命令,成功得到結果
在這裏插入圖片描述

參考:
【1】Apache開源軟件檔案
【2】初識Windows下Python開發Spark

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章