
# 开发一个MRS Spark Python作业
本章节介绍如何在数据开发模块上进行MRS Spark Python作业开发。
#### 案例一：通过MRS Spark Python作业实现统计单词的个数
**前提条件：**
开发者具有OBS相关路径的访问权限。
**数据准备：**
- 准备脚本文件"wordcount.py"，具体内容如下：
  ```
  # -*- coding: utf-8 -*
  import sys
  from pyspark import SparkConf, SparkContext
  def show(x):
      print(x)
  if __name__ == "__main__":
      if len(sys.argv) < 2:
          print ("Usage: wordcount <inputPath> <outputPath>")
          exit(-1)
      #创建SparkConf
      conf = SparkConf().setAppName("wordcount")
      #创建SparkContext  注意参数要传递conf=conf
      sc = SparkContext(conf=conf)
      inputPath = sys.argv[1]
      outputPath = sys.argv[2]
      lines = sc.textFile(name = inputPath)
      #每一行数据按照空格拆分  得到一个个单词
      words = lines.flatMap(lambda line:line.split(" "),True)
      #将每个单词 组装成一个tuple 计数1
      pairWords = words.map(lambda word:(word,1),True)
      #使用3个分区 reduceByKey进行汇总 
      result = pairWords.reduceByKey(lambda v1,v2:v1+v2)
      #打印结果
      result.foreach(lambda t :show(t))
      #将结果保存到文件
      result.saveAsTextFile(outputPath)
      #停止SparkContext
      sc.stop()
  ```
  ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
  需要将编码格式设置为"UTF-8"，否则后续脚本运行时会报错。
  
- 准备数据文件"in.txt"，内容为一段英文单词。
**操作步骤**：
1. 将脚本和数据文件传入OBS桶中，如下图。 
   图1上传文件至OBS桶   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001293318178.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   本例中，**wordcount.py** 和**in.txt**文件上传路径为：obs://obs-tongji/python/
   
   
2. 创建一个数据开发模块的批处理作业，作业名称为"job_MRS_Spark_Python"。 
   图2新建作业   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001991887634.png "点击放大")
   
   
3. 进入作业开发页面，拖动"MRS Spark Python"节点到画布中并单击，配置节点的属性。 
   图3配置MRS Spark Python节点属性   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001285389093.png "点击放大")
   参数设置说明：
   ```
   --master
   yarn
   --deploy-mode
   cluster
   obs://obs-tongji/python/wordcount.py
   obs://obs-tongji/python/in.txt
   obs://obs-tongji/python/out
   ```
   其中：
   obs://obs-tongji/python/wordcount.py为脚本存放路径；
   obs://obs-tongji/python/in.txt为wordcount.py的传入参数路径，可以把需要统计的单词写到里面；
   obs://obs-tongji/python/out为输出参数文件夹的路径，并且会在OBS桶中自动创建该目录（如已存在out目录，会报错）。
   
   
4. 单击"测试运行"，执行该脚本作业。
5. 待测试完成，执行"提交"。
6. 在"作业监控"界面，查看作业执行结果。 
   图4查看作业执行结果   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001240836910.png "点击放大")
   作业日志中显示已运行成功
   图5作业运行日志   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001285390037.png "点击放大")
   图6作业运行状态   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001240671150.png "点击放大")
   
   
7. 查看OBS桶中返回的记录。（没设置返回可跳过） 
   图7查看OBS桶返回记录   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001240670478.png "点击放大")
   
   
#### 案例二：通过MRS Spark Python作业实现打印输出"hello python"
**前提条件：**
开发者具有OBS相关路径的访问权限。
**数据准备：**
准备脚本文件"zt_test_sparkPython1.py"，具体内容如下：
```
from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName("master"). setMaster("yarn")
sc = SparkContext(conf=conf)
print("hello python")
sc.stop()
```
**操作步骤：**
1. 将脚本文件传入OBS桶中。
2. 创建一个数据开发模块的批处理作业。
3. 进入作业开发页面，拖动"MRS Spark Python"节点到画布中并单击，配置节点的属性。 
   参数设置说明：
   ```
   --master
   yarn
   --deploy-mode
   cluster
   obs://obs-tongji/python/zt_test_sparkPython1.py
   ```
   其中：zt_test_sparkPython1.py 为脚本所在路径
   
   
4. 单击"测试运行"，执行该脚本作业。
5. 待测试完成，执行"提交"。
6. 在"作业监控"界面，查看作业执行结果。 
   图8查看作业执行结果   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001240670302.png "点击放大")
   
   
7. 日志验证。 
   运行成功后，登录MRS manager后在YARN上查看日志，发现有**hello python**的输出。
   图9查看YARN上日志   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001286096757.png "点击放大")
   
   
 
