一、 环境配置
1)Python环境配置
2)Pycharm可在官网下载
3)以及相应版本的Spark下载。如登录Spark官网,下载1.6.0的版本。
- 并将压缩包解压,解压至相应路径,如D:\spark-1.6.0-bin-hadoop2.6。
- 添加 SPARK_HOME = D:\spark-1.6.0-bin-hadoop2.6。
- 并将 %SPARK_HOME%/bin 添加至环境变量PATH。
- 然后进入命令行,输入pyspark命令。若成功执行。则成功设置环境变量
二、pyspark模块导入
打开Pycharm,新建一个Python工程,以及新建word_count.py,执行以下代码,测试能否导入spark包
import os
# Path for spark source folder
os.environ['SPARK_HOME'] = "D:\spark-1.6.0-bin-hadoop2.6"
# Append pyspark to Python Path
sys.path.append("D:\spark-1.6.0-bin-hadoop2.6\python")
sys.path.append("D:\spark-1.6.0-bin-hadoop2.6\python\lib\py4j-0.9-src.zip")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print("Successfully imported Spark Modules")
except ImportError as e:
print("Can not import Spark Modules", e)
sys.exit(1)
以下代码,必须添加。
# Append pyspark to Python Path
sys.path.append("D:\spark-1.6.0-bin-hadoop2.6\python")
sys.path.append("D:\spark-1.6.0-bin-hadoop2.6\python\lib\py4j-0.9-src.zip")
其添加了Spark的python包中pyspark的路径,以及py4j的路径。
pyspark包包含了我们所需要用到的python函数方法。
而py4j允许用Python编译的python项目可以动态使用java虚拟机中的java对象,并让java虚拟机返回python对象。
若不添加路径,则会报错“ImportError: No module named py4j”以及“ImportError: No module named pyspark”!!!
如果导入成功,则打印” Successfully imported Spark Modules”
三、 编写word count代码
from __future__ import print_function
import sys
from operator import add
import os
# Path for spark source folder
os.environ['SPARK_HOME'] = "D:\spark-1.6.0-bin-hadoop2.6"
# Append pyspark to Python Path
sys.path.append("D:\spark-1.6.0-bin-hadoop2.6\python")
sys.path.append("D:\spark-1.6.0-bin-hadoop2.6\python\lib\py4j-0.9-src.zip")
from pyspark import SparkContext
from pyspark import SparkConf
if __name__ == '__main__':
if len( sys.argv ) != 3:
print ('Usage: python input_name output_name')
exit(1)
inputFile = sys.argv[1]
outputFile = sys.argv[2]
sc = SparkContext()
text_file = sc.textFile(inputFile)
counts = text_file.flatMap(lambda line: line.split(' ')).map(lambda word: (word, 1)).reduceByKey(
lambda a, b: a + b)
counts.saveAsTextFile(outputFile)
四、 运行代码
spark-submit ./word_count.py ./1.txt ./2
运行成功,可在2文件夹得到相应的结果。