准备
数据
链接: 数据下载.
需求
- 将同一月份的PM_DongSi累加并且排序
代码实现
import org.apache.commons.lang3.StringUtils
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark_Test01 {
def main(args: Array[String]): Unit = {
//1、读取文件
val conf = new SparkConf().setMaster("local[6]").setAppName("test")
val sc = new SparkContext(conf)
val sourceRDD = sc.textFile("resource/")
//2、通过算子处理数据
//1、抽取数据(年 月 PM)=>((年,月),PM)
//2、清洗,过滤掉空的字符串,过滤掉NA
//3、聚合
//4、排序
//将年和月看成是key,PM是v
val resultRDD: RDD[((String, String), Int)] = sourceRDD
//去除第一行列名
.filter(!arr.contains(_))
.map(item => ((item.split(",")(1), item.split(",")(2)), item.split(",")(6)))
//清洗PM为空的数据,和NA的数据
.filter(item => StringUtils.isNotEmpty(item._2) && !item._2.equalsIgnoreCase("NA"))
//转换PM的类型为int
.map(item => (item._1, item._2.toInt))
//求日期相同的PM的和
.reduceByKey((curr, agg) => curr + agg)
//按照PM值进行排序
.sortBy(item => item._2)
//3、获取结果
resultRDD.foreach(println)
//4、关闭资源
sc.stop()
}
}