
# Spark Core样例程序开发思路
#### 场景说明
假定用户有某个周末网民网购停留时间的日志，基于某些业务要求，要求开发Spark应用程序实现如下功能：
- 统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。
- 周末两天的日志文件第一列为姓名，第二列为性别，第三列为本次停留时间，单位为分钟，分隔符为","。 log1.txt：周六网民停留日志
  ```
  LiuYang,female,20
  YuanJing,male,10
  GuoYijun,male,5
  CaiXuyu,female,50
  Liyuan,male,20
  FangBo,female,50
  LiuYang,female,20
  YuanJing,male,10
  GuoYijun,male,50
  CaiXuyu,female,50
  FangBo,female,60
  ```
  log2.txt：周日网民停留日志
  ```
  LiuYang,female,20
  YuanJing,male,10
  CaiXuyu,female,50
  FangBo,female,50
  GuoYijun,male,5
  CaiXuyu,female,50
  Liyuan,male,20
  CaiXuyu,female,50
  FangBo,female,50
  LiuYang,female,20
  YuanJing,male,10
  FangBo,female,50
  GuoYijun,male,50
  CaiXuyu,female,50
  FangBo,female,60
  ```
  
 
#### 数据规划
首先需要把原日志文件放置在HDFS系统里。
1. 本地新建两个文本文件input_data1.txt和input_data2.txt，将log1.txt中的内容复制保存到input_data1.txt，将log2.txt中的内容复制保存到input_data2.txt。
2. 在HDFS客户端路径下建立一个文件夹，"/tmp/input"，并上传input_data1.txt，input_data2.txt到此目录，命令如下：
   1. 在Linux系统HDFS客户端使用命令*hadoop fs -mkdir /tmp/input*（hdfs dfs命令有同样的作用），创建对应目录。
   
   2. 进入到HDFS客户端下的"/tmp/input"目录，在Linux系统HDFS客户端使用命令*hadoop fs -put* *input_data1.txt /tmp/input* 和*hadoop fs -put* *input_data2.txt /tmp/input*，上传数据文件。
    
 
#### 开发思路
统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。
主要分为四个部分：
- 读取原文件数据。
- 筛选女性网民上网时间数据信息。
- 汇总每个女性上网总时间。
- 筛选出停留时间大于两个小时的女性网民信息。
 
#### 打包项目
1. 通过IDEA自带的Maven工具，打包项目，生成jar包。具体操作请参考[在Linux环境中编包并运行Spark程序](https://support.huaweicloud.com/devg3-mrs/mrs_07_410123.html)。
2. 将打包生成的jar包上传到Spark客户端所在服务器的任意目录（例如" /opt/female/" ）下。
 
#### 运行任务
进入Spark客户端目录，调用bin/spark-submit脚本运行代码，运行命令分别如下（类名与文件名等请与实际代码保持一致，此处仅为示例）：
- 运行**Scala** 和**Java** 样例程序
  - **bin/spark-submit --class** *com.huawei.bigdata.spark.examples.FemaleInfoCollection* **-** **-master yarn --deploy-mode client** */opt/female/FemaleInfoCollection-1.0.jar \<inputPath\>*
  
  - 其中，\<inputPath\>指HDFS文件系统中input的路径。
   
- 运行**Python** 样例程序
  - **bin/spark-submit --master yarn --deploy-mode client** */opt/female/SparkPythonExample/collectFemaleInfo.py \<inputPath\>*
  
  - 其中，\<inputPath\>指HDFS文件系统中input的路径
   
 
