0. 说明

  聚合气温数据,聚合出 MAX 、 MIN 、 AVG


1. Spark Shell 实现

  1.1 MAX

  分步实现

# 加载文档
val rdd1 = sc.textFile("file:///home/centos/temp3.dat") # 压扁
val rdd2 = rdd1.map(line=>{var arr = line.split(" ");(arr().toInt , arr().toInt)}) # 得到最大值
val rdd3 = rdd2.reduceByKey((a,b)=>if(a > b)a else b) rdd3.collect # 年份升序
val rdd4 = rdd3.sortByKey(true)
# 气温降序
val rdd4 = rdd3.sortBy(t=>t._2,false)
rdd4.collect 

# 遍历输出
rdd4.foreach(println)

  一步完成

sc.textFile("file:///home/centos/temp3.dat").map(line=>{var arr = line.split(" ");(arr().toInt , arr().toInt)}).reduceByKey((a,b)=>if(a > b)a else b).sortByKey(true).collect.foreach(println)

  1.2 MIN

  分步实现

# 加载文档
val rdd1 = sc.textFile("file:///home/centos/temp3.dat") # 压扁
val rdd2 = rdd1.map(line=>{var arr = line.split(" ");(arr().toInt , arr().toInt)}) # 得到最小值
val rdd3 = rdd2.reduceByKey((a,b)=>if(a < b)a else b) rdd3.collect # 年份升序
val rdd4 = rdd3.sortByKey(true) # 气温降序
val rdd4 = rdd3.sortBy(t=>t._2,false)
rdd4.collect # 遍历输出
rdd4.foreach(println)

  一步完成

sc.textFile("file:///home/centos/temp3.dat").map(line=>{var arr = line.split(" ");(arr(0).toInt , arr(1).toInt)}).reduceByKey((a,b)=>if(a < b)a else b).sortByKey(true).collect.foreach(println)

 


2. IDEA 实现

  2.1 Scala 实现一

import org.apache.spark.{SparkConf, SparkContext}

/**
* 气温数据聚合应用
*/
object TempAggDemoScala {
def main(args: Array[String]): Unit = {
// 创建 spark 配置对象
val conf = new SparkConf()
conf.setAppName("tempAgg2")
conf.setMaster("local") // 创建上下文
val sc = new SparkContext(conf) // 1. 加载文件
val rdd1 = sc.textFile("file:///e:/temp3.dat") // 2. 切割成对(1930,54)
val rdd2 = rdd1.map(line => {
var arr = line.split(" ")
(arr(0).toInt, arr(1).toInt)
}) // 3. 按照年度分组(1930->{23,34,67} , 1931->{...})
val rdd3 = rdd2.groupByKey() // 4. 对组内元素进行统计聚合
val rdd4 = rdd3.mapValues(it => {
val max = it.max
val min = it.min
val sum = it.sum
val size = it.size
(max, min, sum.toFloat / size) }) // 5. 按照年度排序
val rdd5 = rdd4.sortByKey(true) // 6. 输出
rdd5.collect().foreach(println)
}
}

  2.2 Scala 实现二

import org.apache.spark.{SparkConf, SparkContext}

/**
* 气温数据聚合应用2
*/
object TempAggDemo2Scala {
def main(args: Array[String]): Unit = {
// 创建 spark 配置对象
val conf = new SparkConf()
conf.setAppName("tempAgg2")
conf.setMaster("local") // 创建上下文
val sc = new SparkContext(conf) // 1. 加载文件
var rdd1 = sc.textFile("file:///e:/temp3.dat") // 2. 切割成对(1930,(54,54,54,1))
val rdd2 = rdd1.map(line => {
var arr = line.split(" ")
// (max , min , sum , count)
val year = arr(0).toInt
val temp = arr(1).toInt
(year, (temp, temp, temp, 1))
}) // 3. 聚合
val rdd3 = rdd2.reduceByKey((a, b) => {
import scala.math._
(max(a._1, b._1), min(a._2, b._2), a._3 + b._3, a._4 + b._4)
}) // 4. 交换
val rdd4 = rdd3.mapValues(t => {
(t._1, t._2, t._3.toFloat / t._4)
}).sortByKey() rdd4.collect().foreach(println)
}
}

  2.3 Java 实现二

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2;
import scala.Tuple3;
import scala.Tuple4; import java.util.List; /**
* 气温数据聚合应用2
*/
public class TempAggDemoJava2 {
public static void main(String[] args) {
// 创建 spark 配置对象
SparkConf conf = new SparkConf();
conf.setAppName("tempAgg2");
conf.setMaster("local"); // 创建上下文
JavaSparkContext sc = new JavaSparkContext(conf); // 1. 加载文件
JavaRDD<String> rdd1 = sc.textFile("file:///e:/temp3.dat"); // 2. 变换(1903,(32,23,23,1))
JavaPairRDD<Integer, Tuple4<Integer, Integer, Integer, Integer>> rdd2 = rdd1.mapToPair(new PairFunction<String, Integer, Tuple4<Integer, Integer, Integer, Integer>>() {
public Tuple2<Integer, Tuple4<Integer, Integer, Integer, Integer>> call(String s) throws Exception {
String[] arr = s.split(" ");
int year = Integer.parseInt(arr[0]);
int temp = Integer.parseInt(arr[1]); Tuple4<Integer, Integer, Integer, Integer> v = new Tuple4<Integer, Integer, Integer, Integer>(temp, temp, temp, 1);
return new Tuple2<Integer, Tuple4<Integer, Integer, Integer, Integer>>(year, v);
}
}); // 3. 聚合
JavaPairRDD<Integer, Tuple4<Integer, Integer, Integer, Integer>> rdd3 = rdd2.reduceByKey(
new Function2<Tuple4<Integer, Integer, Integer, Integer>, Tuple4<Integer, Integer, Integer, Integer>, Tuple4<Integer, Integer, Integer, Integer>>() {
public Tuple4<Integer, Integer, Integer, Integer> call(Tuple4<Integer, Integer, Integer, Integer> v1, Tuple4<Integer, Integer, Integer, Integer> v2) throws Exception {
int max = Math.max(v1._1(), v2._1());
int min = Math.min(v1._2(), v2._2());
int sum = v1._3() + v2._3();
int count = v1._4() + v2._4(); return new Tuple4<Integer, Integer, Integer, Integer>(max, min, sum, count);
}
}); //4. map取出avg
JavaPairRDD<Integer, Tuple3<Integer, Integer, Float>> rdd4 = rdd3.mapValues(new Function<Tuple4<Integer, Integer, Integer, Integer>, Tuple3<Integer, Integer, Float>>() {
public Tuple3<Integer, Integer, Float> call(Tuple4<Integer, Integer, Integer, Integer> v1) throws Exception {
return new Tuple3<Integer, Integer, Float>(v1._1(), v1._2(), (float) v1._3() / v1._4());
}
}); // 5. 排序
JavaPairRDD<Integer, Tuple3<Integer, Integer, Float>> rdd5 = rdd4.sortByKey(); // 6. 列表
List<Tuple2<Integer, Tuple3<Integer, Integer, Float>>> list = rdd5.collect(); for (Tuple2<Integer, Tuple3<Integer, Integer, Float>> t : list) {
System.out.println(t);
} }
}

[Spark Core] Spark 实现气温统计的更多相关文章

  1. 大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

    第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark ...

  2. [Spark Core] Spark Client Job 提交三级调度框架

    0. 说明  官方文档  Job Scheduling Spark 调度核心组件: DagScheduler TaskScheduler BackendScheduler 1. DagSchedule ...

  3. [Spark Core] Spark 核心组件

    0. 说明 [Spark 核心组件示意图] 1. RDD resilient distributed dataset , 弹性数据集 轻量级的数据集合,逻辑上的集合.等价于 list 没有携带数据. ...

  4. [Spark Core] Spark 使用第三方 Jar 包的方式

    0. 说明 Spark 下运行job,使用第三方 Jar 包的 3 种方式. 1. 方式一 将第三方 Jar 包分发到所有的 spark/jars 目录下 2. 方式二 将第三方 Jar 打散,和我们 ...

  5. 【待补充】[Spark Core] Spark 实现标签生成

    0. 说明 在 IDEA 中编写 Spark 代码实现将 JSON 数据转换成标签,分别用 Scala & Java 两种代码实现. 1. 准备 1.1 pom.xml  <depend ...

  6. [Spark Core] Spark 在 IDEA 下编程

    0. 说明 Spark 在 IDEA 下使用 Scala  & Spark 在 IDEA 下使用 Java 编写 WordCount 程序 1. 准备 在项目中新建模块,为模块添加 Maven ...

  7. [Spark Core] Spark Shell 实现 Word Count

    0. 说明 在 Spark Shell 实现 Word Count RDD (Resilient Distributed dataset), 弹性分布式数据集. 示意图 1. 实现 1.1 分步实现 ...

  8. Spark 3.x Spark Core详解 & 性能优化

    Spark Core 1. 概述 Spark 是一种基于内存的快速.通用.可扩展的大数据分析计算引擎 1.1 Hadoop vs Spark 上面流程对应Hadoop的处理流程,下面对应着Spark的 ...

  9. spark core (二)

    一.Spark-Shell交互式工具 1.Spark-Shell交互式工具 Spark-Shell提供了一种学习API的简单方式, 以及一个能够交互式分析数据的强大工具. 在Scala语言环境下或Py ...

随机推荐

  1. Pro * c Oracle 12c

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<sqlca.h> vo ...

  2. SSH-公私钥认证

    Linux下SSH的认证方式有两种,即密码认证和公私钥认证. 我们在日常的安全维护中,出于安全的考虑,密码不明文存放,会使用公私钥认证方式.这个时候我们就需要使用ssh-keygen,ssh-keyg ...

  3. 使用vertical-align实现垂直对齐

    关于垂直对齐,之前研究过好几次了,但感觉每次都没研究透彻,做了几个效果,就觉得自己掌握了,实在是自欺欺人.真乃搞技术的大忌. 这两天又下定决心重新开始研究vertical-allign这个高深莫测的属 ...

  4. Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架

    本文是关于 Newbe.Claptrap 项目主体内容的介绍,读者可以通过这篇文章,大体了解项目内容. 轮子源于需求 随着互联网应用的蓬勃发展,相关的技术理论和实现手段也在被不断创造出来.诸如 “云原 ...

  5. js设计模式总结1

    js设计模式有很多种,知道不代表会用,更不代表理解,为了更好的理解每个设计模式,对每个设计模式进行总结,以后只要看到总结,就能知道该设计模式的作用,以及模式存在的优缺点,使用范围. 本文主要参考张容铭 ...

  6. ConcurrentHashMap 扩容分析拾遗

    前言 这是一篇对 transfer 方法的拾遗,关于之前那篇文章的一些一笔带过,或者当时不知道的地方进行回顾. 疑点 1. 为什么将链表拆成两份的时候,0 在低位,1 在高位? 回顾一下 transf ...

  7. SQL server Profiler 监视数据库活动

    做网站后台开始时需要考虑后台对数据库的一些操作,比如尽量减少查询次数,尽快释放连接,只选取必须的字段等等.如果是用三层开发,复杂的项目中直接拼装SQL语句多一点,拼装的SQL语句可以直接在SQL se ...

  8. Java多线程--基础概念

    Java多线程--基础概念 必须知道的几个概念 同步和异步 同步方法一旦开始,调用者必须等到方法调用返回后,才能执行后续行为:而异步方法调用,一旦开始,方法调用就立即返回,调用者不用等待就可以继续执行 ...

  9. C#转换成Json的方法集

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...

  10. video视频在本地可以播放,在服务器上不可以播放

    今天遇到一个比较坑的问题,视频在本地可以播放,然后放到服务器上面就播放不了,原因是因为服务器上面不支持mp4的播放,下面看解决办法.1.首先进入IIS(Internet Information Ser ...